[dgit import tarball juce 5.4.4~repack0-3+rpi1 juce_5.4.4~repack0-3+rpi1.debian.tar.xz]
--- /dev/null
+juce (5.2.0~repack-1) unstable; urgency=medium
+
+ Removal of "libjuce(-dev)" - switch to "juce-modules-source"
+ ============================================================
+ Starting with JUCE-5.2.0, Debian no longer ships libjuce(-dev) packages, as
+ they turned out to be not useful: the use case heavily favoured by upstream
+ is "static linking".
+ In order to keep JUCE useful for developers and packagers, we now suggest to
+ use the 'juce-modules-source' package instead.
+
+ Breaking changes
+ ================
+ See BREAKING-CHANGES.txt (in the 'juce-modules-sources') package for upstream
+ incompatibilities.
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 09 Nov 2017 13:46:52 +0100
--- /dev/null
+[Desktop Entry]
+Version=1.0
+Name=Projucer
+GenericName=JUCE project management tool
+Comment=IDE for working with JUCE based projects
+Exec=/usr/bin/Projucer %f
+Icon=juce.png
+Categories=Development
+MimeType=applications/x-juce;
+Terminal=false
+Type=Application
+Keywords=Development;IDE;C++
--- /dev/null
+JUCE for Debian
+===============
+
+upstream's preferred form of usage of JUCE is to include a verbatim copy of all
+used JUCE modules in your application.
+This is made explicit in the 'Projucer', JUCE's own software project
+management workbench, that will copy (or symlink, or include otherwise) the
+modules' source code into your project.
+
+# Projucer for Debian
+
+Installing the following packages will give you the 'Projucer' as Debian
+packages while keeping your embedded-module-code workflow:
+ - juce-tools (contains the Projucer)
+ - juce-modules-source (contains the source-code for the JUCE modules)
+
+The 'Projucer' as shipped with Debian has the following modification regarding
+the once shipped by upstream:
+
+# Debian packages that depend on JUCE
+
+This is a quick guideline for packaging upstream software that uses JUCE for
+Debian.
+For further implementation details check out the 'iem-plugin-suite' package.
+
+- Build-Depend on 'juce-modules-source'
+- Add 'Built-Using: juce-modules-source (= <<version>>)' to debian/control
+ (replace '<<version>>' with the actual version of 'juce-modules-source', as
+ obtained with
+
+ dpkg-query --show --showformat='${source:Version}' juce-modules-source
+
+
+ E.g. dh based packages might use something like the following in debian/rules:
+
+ JUCE_VERSION := $(shell dpkg-query --show --showformat='$${source:Version}' juce-modules-source)
+ override_dh_gencontrol:
+ dh_gencontrol -- -Vjuce:BuiltUsing="juce ( = $(JUCE_VERSION) )"
+
+ Accompanied by the following in the binary package's section in debian/control:
+
+ Built-Using: ${juce:BuiltUsing}
+
+- If needed, dynamically link against the following libraries (as
+ "juce-modules-source" does not include their sources (as opposed to upstream):
+ - libjpeg
+ - libpng
+ - libflac
+ - libvorbis libvorbisenc libvorbisfile
+ - libogg
+ - zlib
+ E.g. using something like:
+
+ make LDFLAGS="$(pkg-config --libs libpng libjpeg flac vorbis vorbisfile vorbisenc ogg zlib)"
+
+ *Alternatively*, resave the JUCE-project with the Debian-packaged 'Projucer'
+ (>=5.4.4~repack0-3) which will take care of adding these libraries (if
+ required) to the LinuxMakefile build.
+
+- When compiling for some embedded architectures (notably 'armel', 'mipsel' and
+ the like), you might need to link against '-latomic'.
+ The following snippet for d/rules can help inject the library on the required
+ architectures:
+
+ # link with libatomic on architectures without built-in atomic
+ noatomicarch = $(shell dpkg-architecture -qDEB_HOST_ARCH | egrep -x "(armel|powerpc|powerpcspe|m68k|mips|mipsel|sh4|riscv64)")
+ ifeq ($(if $(noatomicarch),atomic), atomic)
+ LDFLAGS += -latomic
+ endif
+
+ *Alternatively*, resave the JUCE-project with the Debian-packaged 'Projucer'
+ (>=5.4.4~repack0-3) which will take care of adding the relevant flags to the
+ LinuxMakefile build.
+
+- Also be aware, that Projucer generated makefiles usually include
+ "-march=native", which is mostly not what you want for a generic baseline CPU
+ build.
+ You can override that by setting the TARGET_ARCH make variable
+
+ make TARGET_ARCH=""
--- /dev/null
+the HTML documentation can be found in
+ /usr/share/doc/juce-modules-source/apiref/
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Sun, 11 Feb 2018 10:42:03 +0100
+
--- /dev/null
+removed libraries
+-----------------
+
+upstream embeds a number of FLOSS libraries, that Debian already ships:
+ - FLAC
+ - OGG/Vorbis
+ - jpglib
+ - pnglib
+ - zlib
+upstream also includes some FLOSS headers for building OS-specific audio
+plugins:
+ - AudioUnit (OSX)
+
+since we don't need either of these, they are stripped away from the source
+tarball (in order to not accidentally use them).
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 10 Feb 2016 16:38:34 +0100
+
+
+NOT-removed embedded libraries
+------------------------------
+
+upstream also includes an embedded copy of Box2D which is available on debian as
+"box2d".
+Unfortunately it seems that the two are really different versions and the API
+has changed.
+Therefore we are currently building with the embedded copy.
+
+Once upstream updates their embedded copy to a version compatible with the one
+shipped by Debian, we will switch to the system library.
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 10 Feb 2016 16:38:35 +0100
+
+
+gbp clone
+---------
+
+Starting with gbp>0.8.1, here's an simple way to automatically fine-tune the
+repository in the following ways:
+- make git ignore any .pc/ directory (created by quilt)
+- enable the "--follow-tags" when running 'git-push', so it's harder
+ to forget to push packaging tags along with the branches.
+
+To enable this, run gbp-clone with the '--postclone debian/gbp/postclone.sh'
+option.
+To enable this for ALL repositories cloned via 'gbp' (in the future), do
+something like the following:
+
+ $ mkdir -p ~/bin
+ $ cp debian/gbp/postclone.sh ~/bin/gbphook-postclone
+ $ cat >> ~/.gbp.conf <<EOF
+ [clone]
+ postclone = ~/bin/gbphook-postclone
+ EOF
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Mon, 1 Aug 2016 12:15:50 +0200
--- /dev/null
+
+# 2017-11-08
+
+## drop libjuce
+it simply doesn't work.
+it's not supported by upstream.
+JUCE applications are meant to be compiled with the JUCE sources (statically
+linked).
+JUCE ABI keeps breaking.
+
+it was a lot of work, but we should try to swim too hard against the current...
+
+## keep multiple versions?
+API stability???
+
+#######################################################
+# old TODO
+
+
+## include headers
+do we want all headers starting with "juce_*"?
+
+## build libjuce
+we probably need a debug-version and a non-debug version
+
+or (alternatively) separate libraries for each of the modules.
+
+- check how to build the GUI widgets
+
+### use system installed libraries!
+
+basically done.
+
+Box2D is incompatible
+
+
+
+### clamp defines!
+
+the following defines need to be forced to
+- 0 in Release mode
+- 1 in Debug mode
+defines:
+ - JUCE_FORCE_DEBUG
+ - JUCE_LOG_ASSERTIONS
+ - JUCE_CHECK_MEMORY_LEAKS
--- /dev/null
+juce (5.4.4~repack0-3+rpi1) bullseye-staging; urgency=medium
+
+ * Link with libatomic on armhf too.
+
+ -- Peter Michael Green <plugwash@raspbian.org> Sat, 30 Nov 2019 15:26:20 +0000
+
+juce (5.4.4~repack0-3) unstable; urgency=medium
+
+ * Make Makefiles created by Debian's Projucer compile without further ado
+ * Add patch to link against (required) system-libraries
+ * Add patch to inject LIBS into Projucer's Makefile-exporter from the
+ from the cmdline
+ * Make armel/mipsel/... Projucer add "-latomic" to LIBS
+ * Document the Projucer fixes in README.Debian
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 22 Aug 2019 10:01:56 +0200
+
+juce (5.4.4~repack0-2) unstable; urgency=medium
+
+ * Link against "libatomic" on armel/mipsel/... to fix FTBFS
+ * Fix dversionmangle in d/watch
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 21 Aug 2019 13:56:30 +0200
+
+juce (5.4.4~repack0-1) unstable; urgency=medium
+
+ * New upstream version 5.4.4~repack0
+ (Closes: #925723)
+
+ [ Ondřej Nový ]
+ * Use debhelper-compat instead of debian/compat
+ * Bump Standards-Version to 4.4.0
+
+ [ IOhannes m zmölnig ]
+ * Refresh patches
+ * Drop obsolete d/source/local-options
+ * Update d/copyright
+ * Regenerate d/copyright_hints
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Tue, 20 Aug 2019 13:28:00 +0200
+
+juce (5.4.1+really5.4.1~repack-3) unstable; urgency=medium
+
+ * Add more missing VST opcodes (Closes: #923529)
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 06 Mar 2019 19:22:02 +0100
+
+juce (5.4.1+really5.4.1~repack-2) unstable; urgency=medium
+
+ * Install VSTInterface.h for jor arch:all builds
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Sun, 13 Jan 2019 09:42:22 +0100
+
+juce (5.4.1+really5.4.1~repack-1) unstable; urgency=medium
+
+ [ IOhannes m zmölnig (Debian/GNU) ]
+ * New upstream version 5.4.1
+ * Refresh patches
+
+ * Ported juce_VSTInterface.h from JUCE-5.3.2 to JUCE-5.4.1 (Closes: #913915)
+ * Fixed spelling errors
+ * Updated d/copyright
+ * Fixed 'licensecheck' target
+ * Refreshed d/copyright_hints
+ * Removed trailing whitespace in d/changelog
+ * Bumped standards-version to 4.3.0
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Sat, 12 Jan 2019 00:45:16 +0100
+
+juce (5.4.1+really5.3.2~repack-1) unstable; urgency=medium
+
+ * Reverted to upstream version 5.3.2 (due to VST issues)
+ (Closes: #913915)
+
+ * Fixed cmdline flag for Projucer for the autopkgtest
+ * Updated licensecheck ignores
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 05 Dec 2018 17:06:00 +0100
+
+juce (5.4.1~repack-1) unstable; urgency=medium
+
+ * New upstream version 5.4.1~repack
+
+ [ Olivier Humbert ]
+ * Fixed typos in README.Debian and README.source
+
+ [ IOhannes m zmölnig (Debian/GNU) ]
+ * Refreshed patches and removed patch applied upstream
+ * Updated d/copyright
+ * Regenerated d/copyright_hints
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 14 Nov 2018 11:22:12 +0100
+
+juce (5.3.2~repack-2) unstable; urgency=medium
+
+ * Backported fix for Projucer crash when saving global search-path
+ * Fixed patch-headers in preparation of 'gbp pq'
+ * Declare that building this package doesn't require "root" privileges
+ * Bumped standards-version to 4.2.1
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Fri, 26 Oct 2018 22:17:07 +0200
+
+juce (5.3.2~repack-1) unstable; urgency=medium
+
+ * New upstream version 5.3.2~repack
+ * Refreshed patches
+ * Dropped build-time patch for reproducible builds
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Mon, 14 May 2018 09:58:20 +0200
+
+juce (5.3.1~repack-1) unstable; urgency=medium
+
+ * New upstream version 5.3.1~repack
+ * Refreshed patches
+ * Patch to generate useful JACK client names by default
+ * Run unit-tests on Deb-CI
+ * Fix UnitTests to use system-wide JUCE modules
+ * Refreshed d/copyright_hints
+ * Bumped standards to 4.1.4
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 12 Apr 2018 13:34:24 +0200
+
+juce (5.3.0~repack-1) unstable; urgency=medium
+
+ * New upstream version 5.3.0~repack
+ * Refreshed patches
+ * Fixed path to Icon.png
+ * Added patch to not reveal usage data by default
+ * Install API documentation into /usr/share/doc/juce-modules-source/
+ * Updated copyright for moved Box2D tests
+ * Updated d/copyright_hints
+ * Updated Vcs-* stanzas to salsa.d.o
+ * Updated upstream source URL
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Mon, 26 Mar 2018 16:11:09 +0200
+
+juce (5.2.1~repack-2) unstable; urgency=medium
+
+ * Fixed building of documentation (for real)
+ * Use upstream's Makefile rather than second-guessing how to do it
+ * Added B-D on Python3 and added patch to use Py3 to build docs
+ * Added B-D on graphviz (Closes: #890035)
+ * Dropped .tag files for (more) reproducible builds. (Closes: #890036)
+ Thanks to Chris Lamb <lamby@debian.org> for the last two
+ * Re-enabled LV2 support (Closes: #889969)
+ * Refreshed LV2 sources
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Sun, 11 Feb 2018 10:42:03 +0100
+
+juce (5.2.1~repack-1) unstable; urgency=medium
+
+ * New upstream version 5.2.1~repack
+ * Removed patches applied upstream
+ * Refreshed remaining patches
+ * Have juce-module-source depend on more packages
+ * Fixed libjuce-doc package to actually contain documentation
+ * Added more documentation on how to create Debian packages depending on JUCE
+ * Updated maintainer email
+ * Updated d/copyright(_hints)
+ * Switched build system from CDBS to DH
+ * Bumped dh-compat to 11
+ * Bumped standards version to 4.1.3
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 08 Feb 2018 22:25:21 +0100
+
+juce (5.2.0~repack-3) unstable; urgency=medium
+
+ * Backported upstream fix for IIRFilter with SIMD registers
+ * Updated README.Debian with build instructions for Debian Developers
+ * Bumped standards version to 4.1.2
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Tue, 19 Dec 2017 17:51:50 +0100
+
+juce (5.2.0~repack-2) unstable; urgency=medium
+
+ * Projucer: use Debian's JUCE modules by default
+ * modules-sources: force system provided use of libflac and libvorbis
+ (LP: #1720634)
+ * Recommend image/audio format libraries and depend on zlib-dev
+ * Fixed formatting of NEWS file
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Tue, 19 Dec 2017 11:43:22 +0100
+
+juce (5.2.0~repack-1) unstable; urgency=medium
+
+ * New upstream version 5.2.0~repack
+
+ * Refreshed patches
+ - Dropped those applied upstream
+ - Dropped unneeded patch magic
+ - Removed reproducible DATE_TIME hacks
+ - Patch to fix spelling errors
+ - Patch to avoid checking for updates
+ - Added DEP-3 headers to patches
+ - Build GPL-3 variant of Projucer
+ * Added missing B-Ds, dropped unused B-Ds
+ * Dropped libjuce(0|-dev) packages
+ - juce-modules-source breaks/replaces libjuce-dev
+ * Re-ordered packages in d/control
+ * Installed lv2-ttl-generator as part of juce-tools
+ * "verbose" builds
+ * Dropped 'install' target
+ * Link with "--as-needed"
+ * Changed how to build debian-specific artifacts
+ * Force-disabled embedded zlib/jpeglib/pnglib
+ * Added "Keywords" to desktop-file
+ * Ship BREAKING-CHANGES.txt
+ * Updated README.Debian
+ * Added d/NEWS
+ * Updated d/copyright
+ - Excluded some more well-known binary files from licensecheck
+ * Modernized Vcs-Browser stanza
+ * Fixed reference to non-existing "introjucer" package in long description
+ * Dropped unused lintian override
+ * Bumped standards version to 4.1.1
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 09 Nov 2017 15:04:02 +0100
+
+juce (4.3.0~repack-1) unstable; urgency=medium
+
+ * New upstream version 4.3.0~repack
+
+ [ IOhannes m zmölnig ]
+ * Refreshed patches.
+ * Fixed LV2_wrapper.
+ * Recommend lv2-dev (for building LV2-plugins)
+ * Tightened versioned dependencies.
+ * Added Multi-Arch fields.
+ * Updated d/copyright(_hints)
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Fri, 04 Nov 2016 22:27:09 +0100
+
+juce (4.2.4~repack-1) unstable; urgency=medium
+
+ * New upstream version 4.2.4~repack
+ * Refreshed patches.
+ * Enabled VST pluginhost
+ * Tightened dependency of juce-utils
+ * Update d/copyright_hints
+ * Excluded more binary data from copyright-check
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 21 Sep 2016 12:21:37 +0200
+
+juce (4.2.3~repack-1) unstable; urgency=medium
+
+ * New upstream version 4.2.3~repack
+
+ * Refreshed patches
+ * Documented how to properly checkout the project via gbp
+ * Updated d/copyright_hints
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Mon, 08 Aug 2016 15:47:12 +0200
+
+juce (4.2.2+repack-1) unstable; urgency=medium
+
+ * Imported Upstream version 4.2.2+repack
+
+ * Fixed rule that fixes permissions of source-files
+ * Renamed introjucer/projucer package to juce-tools
+ * Updated README.Debian to reflect package rename
+ * Shortened extended description
+ * Updated d/copyright_hints
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 25 May 2016 17:01:46 +0200
+
+juce (4.2.1+repack-2) unstable; urgency=medium
+
+ * Drop "-march=native" from Projucer build-flags
+ * Refreshed libpng16 patch
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Mon, 02 May 2016 15:51:34 +0200
+
+juce (4.2.1+repack-1) unstable; urgency=medium
+
+ * Imported Upstream version 4.2.1+repack
+ * Introjucer has been replaced by Projucer
+ * Refreshed patches
+ * libjuce: manually include AppConfig.h
+ * libjuce0 symbols file (not used in packaging)
+ * Updated d/copyright
+ * Drop licenses that no longer apply from d/copyright
+ * Install documentation into /usr/share/doc/libjuce/
+ * Bumped standards version to 3.9.8
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 28 Apr 2016 23:38:46 +0200
+
+juce (4.1.0+repack-6) unstable; urgency=medium
+
+ * Updated d/copyright
+ * Fixed homepage field.
+ Thanks to Paul Wise <pabs@debian.org> (Closes: 820653)
+ * Set BUILD_TIME from d/changelog
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Wed, 13 Apr 2016 16:39:10 +0200
+
+juce (4.1.0+repack-5) unstable; urgency=medium
+
+ [ IOhannes m zmölnig ]
+ * LV2 support
+ * Added LV2-wrapper sources to -dev package.
+ * LV2-wrapper not included in library
+ * ttl-generator for lv2
+ * Another try on a decent build-date.
+ * Clamped audio-plugin defines.
+
+ [ Gianfranco Costamagna ]
+ * Fixed build with libpng16. (Closes: 820347)
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Thu, 07 Apr 2016 22:18:20 +0200
+
+juce (4.1.0+repack-4) unstable; urgency=medium
+
+ * Updated B-D from libpng12-dev to libpng-dev.
+ Thanks to Tobias Frost <tobi@debian.org> (Closes: #819438)
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Mon, 28 Mar 2016 21:17:16 +0200
+
+juce (4.1.0+repack-3) unstable; urgency=medium
+
+ * Dropped "-std=gnu++0x" from CFLAGS since we are already using "-std=c++11"
+ (Closes: #816000)
+ * Reverted uscan-compat to 3
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Sat, 27 Feb 2016 17:02:27 +0100
+
+juce (4.1.0+repack-2) unstable; urgency=medium
+
+ * Use numeric build-date
+ * Nicer package description for 'introjucer'
+ * Fixed debian/watch
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Tue, 16 Feb 2016 16:45:04 +0100
+
+juce (4.1.0+repack-1) unstable; urgency=medium
+
+ * Initial release. (Closes: #808611)
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org> Fri, 12 Feb 2016 07:46:59 +0100
--- /dev/null
+Source: juce
+Section: devel
+Priority: optional
+Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
+Uploaders:
+ IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>,
+Build-Depends:
+ debhelper-compat (= 11),
+ pkg-config,
+ libasound2-dev,
+ libcurl4-gnutls-dev | libcurl-dev,
+ libfreetype6-dev,
+ libgl1-mesa-dev | libgl-dev,
+ libgtk-3-dev,
+ libjpeg-dev,
+ libwebkit2gtk-4.0-dev,
+ libx11-dev,
+ libxext-dev,
+ libxinerama-dev,
+ libxrandr-dev,
+ libxcomposite-dev,
+ libxcursor-dev,
+ zlib1g-dev,
+ help2man,
+Build-Depends-Indep:
+ doxygen,
+ graphviz,
+ python3,
+Standards-Version: 4.4.0
+Rules-Requires-Root: no
+Homepage: https://www.juce.com
+Vcs-Git: https://salsa.debian.org/multimedia-team/juce.git
+Vcs-Browser: https://salsa.debian.org/multimedia-team/juce
+
+Package: juce-modules-source
+Architecture: all
+Multi-Arch: foreign
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+ libasound2-dev,
+ libcurl4-gnutls-dev | libcurl-dev,
+ libfreetype6-dev,
+ libgl1-mesa-dev | libgl-dev,
+ libx11-dev,
+ libxext-dev,
+ libxinerama-dev,
+ libxrandr-dev,
+ zlib1g-dev | libz-dev,
+ libwebkit2gtk-4.0-dev,
+ libgtk-3-dev,
+ libflac-dev,
+ libjpeg-dev,
+ libpng-dev,
+ libvorbis-dev,
+Recommends:
+ lv2-dev,
+Replaces: libjuce-dev (<< 5.2.0~)
+Breaks: libjuce-dev (<< 5.2.0~)
+Description: Jules' Utility Class Extensions (module sources)
+ JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ framework for
+ developing cross-platform software.
+ .
+ It contains pretty much everything you're likely to need to create most
+ applications, and is particularly well-suited for building highly-customised
+ GUIs, and for handling graphics and sound.
+ .
+ This package provides the sources for the JUCE modules, as used by 'jucer'
+ projects. (Projucer is provided in the 'juce-tools' package).
+
+Package: juce-tools
+Architecture: any
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+Recommends: juce-modules-source
+Breaks: introjucer
+Replaces: introjucer
+Conflicts: introjucer
+Description: JUCE's project management tools
+ JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ framework for
+ developing cross-platform software.
+ The Projucer (formerly Introjucer) is JUCE's project-management tool and secret
+ weapon.
+ .
+ The Projucer's Duties:
+ - Central management of cross-platform builds
+ - JUCE Module Management
+ - New Project Creation
+ - User-Interface Design Tool
+ - Plug-in Projects
+ - Miscellaneous Utilities
+
+Package: libjuce-doc
+Architecture: all
+Multi-Arch: foreign
+Section: doc
+Depends:
+ ${misc:Depends},
+Suggests: juce-modules-source
+Description: Jules' Utility Class Extensions (documentation)
+ JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ framework for
+ developing cross-platform software.
+ .
+ It contains pretty much everything you're likely to need to create most
+ applications, and is particularly well-suited for building highly-customised
+ GUIs, and for handling graphics and sound.
+ .
+ This package contains html documentation for the JUCE API.
--- /dev/null
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: JUCE
+Upstream-Contact: <umlaeute@debian.org>
+Source: https://github.com/WeAreROLI/JUCE
+Files-Excluded:
+ modules/juce_audio_formats/codecs/flac/*
+ modules/juce_audio_formats/codecs/oggvorbis/*
+ modules/juce_audio_plugin_client/AU/*
+ modules/juce_graphics/image_formats/jpglib/*
+ modules/juce_graphics/image_formats/pnglib/*
+ modules/juce_core/zip/zlib/*
+ .gitignore
+
+Files: *
+Copyright: 2015-2019, ROLI Ltd
+License: GPL-3
+
+Files:
+ modules/juce_core/*
+ modules/juce_audio_devices/*
+ modules/juce_audio_basics/*
+ modules/juce_events/*
+ modules/juce_blocks_basics/*
+Copyright: 2015-2019, ROLI Ltd
+License: ISC
+
+Files: modules/juce_box2d/box2d/*
+ examples/Assets/Box2DTests/*
+ examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/*
+Copyright: 2006-2011, Erin Catto http://www.box2d.org
+License: Zlib/libpng
+
+Files: modules/juce_audio_processors/format_types/VST3_SDK/*
+Copyright: 2018-2019, Steinberg Media Technologies GmbH
+License: GPL-3
+
+Files: modules/juce_audio_processors/format_types/VST3_SDK/base/*
+Copyright: 2018-2019, Steinberg Media Technologies GmbH
+License: BSD-3-clause
+
+Files:
+ ex*/*/Builds/Android/gradle/wrapper/*
+ extras/Projucer/Source/BinaryData/gradle/*
+Copyright: 2015 Gradle Inc.
+License: Apache-2.0
+
+Files: debian/*
+Copyright: 2015-2019, IOhannes m zmölnig <umlaeute@debian.org>
+License: GPL-2+ or GPL-3
+
+Files: debian/extra/juce_audio_plugin_client/* debian/extra/lv2-ttl-generator/lv2_ttl_generator.c
+Copyright: Filipe Coelho <falkTX>
+License: GPL-2+ or AGPL-3
+
+Files: debian/extra/juce_audio_plugin_client/LV2/includes/lv2_external_ui.h
+Copyright: NONE
+License: public-domain
+License-Grant:
+ This work is in public domain.
+ .
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ .
+ If you have questions, contact Filipe Coelho (aka falkTX) <falktx@falktx.com>
+ or ask in #lad channel, FreeNode IRC network.
+
+
+License: GPL-3
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 3, as
+ published by the Free Software Foundation.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+Comment:
+ On Debian systems, the complete text of the GNU General Public License
+ (GPL) version 3 can be found in "/usr/share/common-licenses/GPL-3".
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+License: GPL-2+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+ .
+ Some files differ from above by replacing "this program" with "this
+ file".
+ .
+ On Debian GNU systems, the complete text of the GNU General Public
+ License (GPL) version 2 or later can be found in
+ '/usr/share/common-licenses/GPL-2'.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+License: Zlib/libpng
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+ .
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+ .
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+License: AGPL-3
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+ .
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ .
+ Preamble
+ .
+ The GNU Affero General Public License is a free, copyleft license for
+ software and other kinds of works, specifically designed to ensure
+ cooperation with the community in the case of network server software.
+ .
+ The licenses for most software and other practical works are designed
+ to take away your freedom to share and change the works. By contrast,
+ our General Public Licenses are intended to guarantee your freedom to
+ share and change all versions of a program--to make sure it remains
+ free software for all its users.
+ .
+ When we speak of free software, we are referring to freedom, not price.
+ Our General Public Licenses are designed to make sure that you have the
+ freedom to distribute copies of free software (and charge for them if
+ you wish), that you receive source code or can get it if you want it,
+ that you can change the software or use pieces of it in new free
+ programs, and that you know you can do these things.
+ .
+ Developers that use our General Public Licenses protect your rights
+ with two steps: (1) assert copyright on the software, and (2) offer you
+ this License which gives you legal permission to copy, distribute
+ and/or modify the software.
+ .
+ A secondary benefit of defending all users' freedom is that
+ improvements made in alternate versions of the program, if they receive
+ widespread use, become available for other developers to incorporate.
+ Many developers of free software are heartened and encouraged by the
+ resulting cooperation. However, in the case of software used on
+ network servers, this result may fail to come about. The GNU General
+ Public License permits making a modified version and letting the public
+ access it on a server without ever releasing its source code to the
+ public.
+ .
+ The GNU Affero General Public License is designed specifically to
+ ensure that, in such cases, the modified source code becomes available
+ to the community. It requires the operator of a network server to
+ provide the source code of the modified version running there to the
+ users of that server. Therefore, public use of a modified version, on
+ a publicly accessible server, gives the public access to the source
+ code of the modified version.
+ .
+ An older license, called the Affero General Public License and
+ published by Affero, was designed to accomplish similar goals. This is
+ a different license, not a version of the Affero GPL, but Affero has
+ released a new version of the Affero GPL which permits relicensing
+ under this license.
+ .
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+ .
+ TERMS AND CONDITIONS
+ .
+ 0. Definitions.
+ .
+ "This License" refers to version 3 of the GNU Affero General Public
+ License.
+ .
+ "Copyright" also means copyright-like laws that apply to other kinds of
+ works, such as semiconductor masks.
+ .
+ "The Program" refers to any copyrightable work licensed under this
+ License. Each licensee is addressed as "you". "Licensees" and
+ "recipients" may be individuals or organizations.
+ .
+ To "modify" a work means to copy from or adapt all or part of the work
+ in a fashion requiring copyright permission, other than the making of
+ an exact copy. The resulting work is called a "modified version" of
+ the earlier work or a work "based on" the earlier work.
+ .
+ A "covered work" means either the unmodified Program or a work based on
+ the Program.
+ .
+ To "propagate" a work means to do anything with it that, without
+ permission, would make you directly or secondarily liable for
+ infringement under applicable copyright law, except executing it on a
+ computer or modifying a private copy. Propagation includes copying,
+ distribution (with or without modification), making available to the
+ public, and in some countries other activities as well.
+ .
+ To "convey" a work means any kind of propagation that enables other
+ parties to make or receive copies. Mere interaction with a user
+ through a computer network, with no transfer of a copy, is not
+ conveying.
+ .
+ An interactive user interface displays "Appropriate Legal Notices" to
+ the extent that it includes a convenient and prominently visible
+ feature that (1) displays an appropriate copyright notice, and (2)
+ tells the user that there is no warranty for the work (except to the
+ extent that warranties are provided), that licensees may convey the
+ work under this License, and how to view a copy of this License. If the
+ interface presents a list of user commands or options, such as a menu,
+ a prominent item in the list meets this criterion.
+ .
+ 1. Source Code.
+ .
+ The "source code" for a work means the preferred form of the work for
+ making modifications to it. "Object code" means any non-source form of
+ a work.
+ .
+ A "Standard Interface" means an interface that either is an official
+ standard defined by a recognized standards body, or, in the case of
+ interfaces specified for a particular programming language, one that is
+ widely used among developers working in that language.
+ .
+ The "System Libraries" of an executable work include anything, other
+ than the work as a whole, that (a) is included in the normal form of
+ packaging a Major Component, but which is not part of that Major
+ Component, and (b) serves only to enable use of the work with that
+ Major Component, or to implement a Standard Interface for which an
+ implementation is available to the public in source code form. A "Major
+ Component", in this context, means a major essential component (kernel,
+ window system, and so on) of the specific operating system (if any) on
+ which the executable work runs, or a compiler used to produce the work,
+ or an object code interpreter used to run it.
+ .
+ The "Corresponding Source" for a work in object code form means all the
+ source code needed to generate, install, and (for an executable work)
+ run the object code and to modify the work, including scripts to
+ control those activities. However, it does not include the work's
+ System Libraries, or general-purpose tools or generally available free
+ programs which are used unmodified in performing those activities but
+ which are not part of the work. For example, Corresponding Source
+ includes interface definition files associated with source files for
+ the work, and the source code for shared libraries and dynamically
+ linked subprograms that the work is specifically designed to require,
+ such as by intimate data communication or control flow between those
+ subprograms and other parts of the work.
+ .
+ The Corresponding Source need not include anything that users can
+ regenerate automatically from other parts of the Corresponding Source.
+ .
+ The Corresponding Source for a work in source code form is that same
+ work.
+ .
+ 2. Basic Permissions.
+ .
+ All rights granted under this License are granted for the term of
+ copyright on the Program, and are irrevocable provided the stated
+ conditions are met. This License explicitly affirms your unlimited
+ permission to run the unmodified Program. The output from running a
+ covered work is covered by this License only if the output, given its
+ content, constitutes a covered work. This License acknowledges your
+ rights of fair use or other equivalent, as provided by copyright law.
+ .
+ You may make, run and propagate covered works that you do not convey,
+ without conditions so long as your license otherwise remains in force.
+ You may convey covered works to others for the sole purpose of having
+ them make modifications exclusively for you, or provide you with
+ facilities for running those works, provided that you comply with the
+ terms of this License in conveying all material for which you do not
+ control copyright. Those thus making or running the covered works for
+ you must do so exclusively on your behalf, under your direction and
+ control, on terms that prohibit them from making any copies of your
+ copyrighted material outside their relationship with you.
+ .
+ Conveying under any other circumstances is permitted solely under the
+ conditions stated below. Sublicensing is not allowed; section 10 makes
+ it unnecessary.
+ .
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+ .
+ No covered work shall be deemed part of an effective technological
+ measure under any applicable law fulfilling obligations under article
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar
+ laws prohibiting or restricting circumvention of such measures.
+ .
+ When you convey a covered work, you waive any legal power to forbid
+ circumvention of technological measures to the extent such
+ circumvention is effected by exercising rights under this License with
+ respect to the covered work, and you disclaim any intention to limit
+ operation or modification of the work as a means of enforcing, against
+ the work's users, your or third parties' legal rights to forbid
+ circumvention of technological measures.
+ .
+ 4. Conveying Verbatim Copies.
+ .
+ You may convey verbatim copies of the Program's source code as you
+ receive it, in any medium, provided that you conspicuously and
+ appropriately publish on each copy an appropriate copyright notice;
+ keep intact all notices stating that this License and any
+ non-permissive terms added in accord with section 7 apply to the code;
+ keep intact all notices of the absence of any warranty; and give all
+ recipients a copy of this License along with the Program.
+ .
+ You may charge any price or no price for each copy that you convey, and
+ you may offer support or warranty protection for a fee.
+ .
+ 5. Conveying Modified Source Versions.
+ .
+ You may convey a work based on the Program, or the modifications to
+ produce it from the Program, in the form of source code under the terms
+ of section 4, provided that you also meet all of these conditions:
+ .
+ a) The work must carry prominent notices stating that you modified it,
+ and giving a relevant date.
+ .
+ b) The work must carry prominent notices stating that it is released
+ under this License and any conditions added under section 7. This
+ requirement modifies the requirement in section 4 to "keep intact all
+ notices".
+ .
+ c) You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will
+ therefore apply, along with any applicable section 7 additional terms,
+ to the whole of the work, and all its parts, regardless of how they are
+ packaged. This License gives no permission to license the work in any
+ other way, but it does not invalidate such permission if you have
+ separately received it.
+ .
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work
+ need not make them do so.
+ .
+ A compilation of a covered work with other separate and independent
+ works, which are not by their nature extensions of the covered work,
+ and which are not combined with it such as to form a larger program, in
+ or on a volume of a storage or distribution medium, is called an
+ "aggregate" if the compilation and its resulting copyright are not used
+ to limit the access or legal rights of the compilation's users beyond
+ what the individual works permit. Inclusion of a covered work in an
+ aggregate does not cause this License to apply to the other parts of
+ the aggregate.
+ .
+ 6. Conveying Non-Source Forms.
+ .
+ You may convey a covered work in object code form under the terms of
+ sections 4 and 5, provided that you also convey the machine-readable
+ Corresponding Source under the terms of this License, in one of these
+ ways:
+ .
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium customarily
+ used for software interchange.
+ .
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a written
+ offer, valid for at least three years and valid for as long as you
+ offer spare parts or customer support for that product model, to give
+ anyone who possesses the object code either (1) a copy of the
+ Corresponding Source for all the software in the product that is
+ covered by this License, on a durable physical medium customarily used
+ for software interchange, for a price no more than your reasonable cost
+ of physically performing this conveying of source, or (2) access to
+ copy the Corresponding Source from a network server at no charge.
+ .
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This alternative is
+ allowed only occasionally and noncommercially, and only if you received
+ the object code with such an offer, in accord with subsection 6b.
+ .
+ d) Convey the object code by offering access from a designated place
+ (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to copy
+ the object code is a network server, the Corresponding Source may be on
+ a different server (operated by you or a third party) that supports
+ equivalent copying facilities, provided you maintain clear directions
+ next to the object code saying where to find the Corresponding Source.
+ Regardless of what server hosts the Corresponding Source, you remain
+ obligated to ensure that it is available for as long as needed to
+ satisfy these requirements.
+ .
+ e) Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of
+ the work are being offered to the general public at no charge under
+ subsection 6d.
+ .
+ A separable portion of the object code, whose source code is excluded
+ from the Corresponding Source as a System Library, need not be included
+ in conveying the object code work.
+ .
+ A "User Product" is either (1) a "consumer product", which means any
+ tangible personal property which is normally used for personal, family,
+ or household purposes, or (2) anything designed or sold for
+ incorporation into a dwelling. In determining whether a product is a
+ consumer product, doubtful cases shall be resolved in favor of
+ coverage. For a particular product received by a particular user,
+ "normally used" refers to a typical or common use of that class of
+ product, regardless of the status of the particular user or of the way
+ in which the particular user actually uses, or expects or is expected
+ to use, the product. A product is a consumer product regardless of
+ whether the product has substantial commercial, industrial or
+ non-consumer uses, unless such uses represent the only significant mode
+ of use of the product.
+ .
+ "Installation Information" for a User Product means any methods,
+ procedures, authorization keys, or other information required to
+ install and execute modified versions of a covered work in that User
+ Product from a modified version of its Corresponding Source. The
+ information must suffice to ensure that the continued functioning of
+ the modified object code is in no case prevented or interfered with
+ solely because modification has been made.
+ .
+ If you convey an object code work under this section in, or with, or
+ specifically for use in, a User Product, and the conveying occurs as
+ part of a transaction in which the right of possession and use of the
+ User Product is transferred to the recipient in perpetuity or for a
+ fixed term (regardless of how the transaction is characterized), the
+ Corresponding Source conveyed under this section must be accompanied by
+ the Installation Information. But this requirement does not apply if
+ neither you nor any third party retains the ability to install modified
+ object code on the User Product (for example, the work has been
+ installed in ROM).
+ .
+ The requirement to provide Installation Information does not include a
+ requirement to continue to provide support service, warranty, or
+ updates for a work that has been modified or installed by the
+ recipient, or for the User Product in which it has been modified or
+ installed. Access to a network may be denied when the modification
+ itself materially and adversely affects the operation of the network or
+ violates the rules and protocols for communication across the network.
+ .
+ Corresponding Source conveyed, and Installation Information provided,
+ in accord with this section must be in a format that is publicly
+ documented (and with an implementation available to the public in
+ source code form), and must require no special password or key for
+ unpacking, reading or copying.
+ .
+ 7. Additional Terms.
+ .
+ "Additional permissions" are terms that supplement the terms of this
+ License by making exceptions from one or more of its conditions.
+ Additional permissions that are applicable to the entire Program shall
+ be treated as though they were included in this License, to the extent
+ that they are valid under applicable law. If additional permissions
+ apply only to part of the Program, that part may be used separately
+ under those permissions, but the entire Program remains governed by
+ this License without regard to the additional permissions.
+ .
+ When you convey a copy of a covered work, you may at your option remove
+ any additional permissions from that copy, or from any part of it.
+ (Additional permissions may be written to require their own removal in
+ certain cases when you modify the work.) You may place additional
+ permissions on material, added by you to a covered work, for which you
+ have or can give appropriate copyright permission.
+ .
+ Notwithstanding any other provision of this License, for material you
+ add to a covered work, you may (if authorized by the copyright holders
+ of that material) supplement the terms of this License with terms:
+ .
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+ .
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+ .
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+ .
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+ .
+ e) Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or
+ .
+ f) Requiring indemnification of licensors and authors of that material
+ by anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any
+ liability that these contractual assumptions directly impose on those
+ licensors and authors.
+ .
+ All other non-permissive additional terms are considered "further
+ restrictions" within the meaning of section 10. If the Program as you
+ received it, or any part of it, contains a notice stating that it is
+ governed by this License along with a term that is a further
+ restriction, you may remove that term. If a license document contains
+ a further restriction but permits relicensing or conveying under this
+ License, you may add to a covered work material governed by the terms
+ of that license document, provided that the further restriction does
+ not survive such relicensing or conveying.
+ .
+ If you add terms to a covered work in accord with this section, you
+ must place, in the relevant source files, a statement of the additional
+ terms that apply to those files, or a notice indicating where to find
+ the applicable terms.
+ .
+ Additional terms, permissive or non-permissive, may be stated in the
+ form of a separately written license, or stated as exceptions; the
+ above requirements apply either way.
+ .
+ 8. Termination.
+ .
+ You may not propagate or modify a covered work except as expressly
+ provided under this License. Any attempt otherwise to propagate or
+ modify it is void, and will automatically terminate your rights under
+ this License (including any patent licenses granted under the third
+ paragraph of section 11).
+ .
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally terminates
+ your license, and (b) permanently, if the copyright holder fails to
+ notify you of the violation by some reasonable means prior to 60 days
+ after the cessation.
+ .
+ Moreover, your license from a particular copyright holder is reinstated
+ permanently if the copyright holder notifies you of the violation by
+ some reasonable means, this is the first time you have received notice
+ of violation of this License (for any work) from that copyright holder,
+ and you cure the violation prior to 30 days after your receipt of the
+ notice.
+ .
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License. If your rights have been terminated and not permanently
+ reinstated, you do not qualify to receive new licenses for the same
+ material under section 10.
+ .
+ 9. Acceptance Not Required for Having Copies.
+ .
+ You are not required to accept this License in order to receive or run
+ a copy of the Program. Ancillary propagation of a covered work
+ occurring solely as a consequence of using peer-to-peer transmission to
+ receive a copy likewise does not require acceptance. However, nothing
+ other than this License grants you permission to propagate or modify
+ any covered work. These actions infringe copyright if you do not
+ accept this License. Therefore, by modifying or propagating a covered
+ work, you indicate your acceptance of this License to do so.
+ .
+ 10. Automatic Licensing of Downstream Recipients.
+ .
+ Each time you convey a covered work, the recipient automatically
+ receives a license from the original licensors, to run, modify and
+ propagate that work, subject to this License. You are not responsible
+ for enforcing compliance by third parties with this License.
+ .
+ An "entity transaction" is a transaction transferring control of an
+ organization, or substantially all assets of one, or subdividing an
+ organization, or merging organizations. If propagation of a covered
+ work results from an entity transaction, each party to that transaction
+ who receives a copy of the work also receives whatever licenses to the
+ work the party's predecessor in interest had or could give under the
+ previous paragraph, plus a right to possession of the Corresponding
+ Source of the work from the predecessor in interest, if the predecessor
+ has it or can get it with reasonable efforts.
+ .
+ You may not impose any further restrictions on the exercise of the
+ rights granted or affirmed under this License. For example, you may
+ not impose a license fee, royalty, or other charge for exercise of
+ rights granted under this License, and you may not initiate litigation
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ any patent claim is infringed by making, using, selling, offering for
+ sale, or importing the Program or any portion of it.
+ .
+ 11. Patents.
+ .
+ A "contributor" is a copyright holder who authorizes use under this
+ License of the Program or a work on which the Program is based. The
+ work thus licensed is called the contributor's "contributor version".
+ .
+ A contributor's "essential patent claims" are all patent claims owned
+ or controlled by the contributor, whether already acquired or hereafter
+ acquired, that would be infringed by some manner, permitted by this
+ License, of making, using, or selling its contributor version, but do
+ not include claims that would be infringed only as a consequence of
+ further modification of the contributor version. For purposes of this
+ definition, "control" includes the right to grant patent sublicenses in
+ a manner consistent with the requirements of this License.
+ .
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+ patent license under the contributor's essential patent claims, to
+ make, use, sell, offer for sale, import and otherwise run, modify and
+ propagate the contents of its contributor version.
+ .
+ In the following three paragraphs, a "patent license" is any express
+ agreement or commitment, however denominated, not to enforce a patent
+ (such as an express permission to practice a patent or covenant not to
+ sue for patent infringement). To "grant" such a patent license to a
+ party means to make such an agreement or commitment not to enforce a
+ patent against the party.
+ .
+ If you convey a covered work, knowingly relying on a patent license,
+ and the Corresponding Source of the work is not available for anyone to
+ copy, free of charge and under the terms of this License, through a
+ publicly available network server or other readily accessible means,
+ then you must either (1) cause the Corresponding Source to be so
+ available, or (2) arrange to deprive yourself of the benefit of the
+ patent license for this particular work, or (3) arrange, in a manner
+ consistent with the requirements of this License, to extend the patent
+ license to downstream recipients. "Knowingly relying" means you have
+ actual knowledge that, but for the patent license, your conveying the
+ covered work in a country, or your recipient's use of the covered work
+ in a country, would infringe one or more identifiable patents in that
+ country that you have reason to believe are valid.
+ .
+ If, pursuant to or in connection with a single transaction or
+ arrangement, you convey, or propagate by procuring conveyance of, a
+ covered work, and grant a patent license to some of the parties
+ receiving the covered work authorizing them to use, propagate, modify
+ or convey a specific copy of the covered work, then the patent license
+ you grant is automatically extended to all recipients of the covered
+ work and works based on it.
+ .
+ A patent license is "discriminatory" if it does not include within the
+ scope of its coverage, prohibits the exercise of, or is conditioned on
+ the non-exercise of one or more of the rights that are specifically
+ granted under this License. You may not convey a covered work if you
+ are a party to an arrangement with a third party that is in the
+ business of distributing software, under which you make payment to the
+ third party based on the extent of your activity of conveying the work,
+ and under which the third party grants, to any of the parties who would
+ receive the covered work from you, a discriminatory patent license (a)
+ in connection with copies of the covered work conveyed by you (or
+ copies made from those copies), or (b) primarily for and in connection
+ with specific products or compilations that contain the covered work,
+ unless you entered into that arrangement, or that patent license was
+ granted, prior to 28 March 2007.
+ .
+ Nothing in this License shall be construed as excluding or limiting any
+ implied license or other defenses to infringement that may otherwise be
+ available to you under applicable patent law.
+ .
+ 12. No Surrender of Others' Freedom.
+ .
+ If conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot convey a
+ covered work so as to satisfy simultaneously your obligations under
+ this License and any other pertinent obligations, then as a consequence
+ you may not convey it at all. For example, if you agree to terms that
+ obligate you to collect a royalty for further conveying from those to
+ whom you convey the Program, the only way you could satisfy both those
+ terms and this License would be to refrain entirely from conveying the
+ Program.
+ .
+ 13. Remote Network Interaction; Use with the GNU General Public
+ License.
+ .
+ Notwithstanding any other provision of this License, if you modify the
+ Program, your modified version must prominently offer all users
+ interacting with it remotely through a computer network (if your
+ version supports such interaction) an opportunity to receive the
+ Corresponding Source of your version by providing access to the
+ Corresponding Source from a network server at no charge, through some
+ standard or customary means of facilitating copying of software. This
+ Corresponding Source shall include the Corresponding Source for any
+ work covered by version 3 of the GNU General Public License that is
+ incorporated pursuant to the following paragraph.
+ .
+ Notwithstanding any other provision of this License, you have
+ permission to link or combine any covered work with a work licensed
+ under version 3 of the GNU General Public License into a single
+ combined work, and to convey the resulting work. The terms of this
+ License will continue to apply to the part which is the covered work,
+ but the work with which it is combined will remain governed by version
+ 3 of the GNU General Public License.
+ .
+ 14. Revised Versions of this License.
+ .
+ The Free Software Foundation may publish revised and/or new versions of
+ the GNU Affero General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+ .
+ Each version is given a distinguishing version number. If the Program
+ specifies that a certain numbered version of the GNU Affero General
+ Public License "or any later version" applies to it, you have the
+ option of following the terms and conditions either of that numbered
+ version or of any later version published by the Free Software
+ Foundation. If the Program does not specify a version number of the
+ GNU Affero General Public License, you may choose any version ever
+ published by the Free Software Foundation.
+ .
+ If the Program specifies that a proxy can decide which future versions
+ of the GNU Affero General Public License can be used, that proxy's
+ public statement of acceptance of a version permanently authorizes you
+ to choose that version for the Program.
+ .
+ Later license versions may give you additional or different
+ permissions. However, no additional obligations are imposed on any
+ author or copyright holder as a result of your choosing to follow a
+ later version.
+ .
+ 15. Disclaimer of Warranty.
+ .
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
+ WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+ OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU
+ ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+ .
+ 16. Limitation of Liability.
+ .
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+ CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+ NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
+ SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO
+ OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY
+ HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ .
+ 17. Interpretation of Sections 15 and 16.
+ .
+ If the disclaimer of warranty and limitation of liability provided
+ above cannot be given local legal effect according to their terms,
+ reviewing courts shall apply local law that most closely approximates
+ an absolute waiver of all civil liability in connection with the
+ Program, unless a warranty or assumption of liability accompanies a
+ copy of the Program in return for a fee.
+ .
+ END OF TERMS AND CONDITIONS
+ .
+ How to Apply These Terms to Your New Programs
+ .
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these
+ terms.
+ .
+ To do so, attach the following notices to the program. It is safest to
+ attach them to the start of each source file to most effectively state
+ the exclusion of warranty; and each file should have at least the
+ "copyright" line and a pointer to where the full notice is found.
+ .
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+ .
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Affero General Public License for more details.
+ .
+ You should have received a copy of the GNU Affero General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
+ .
+ Also add information on how to contact you by electronic and paper
+ mail.
+ .
+ If your software can interact with users remotely through a computer
+ network, you should also make sure that it provides a way for users to
+ get its source. For example, if your program is a web application, its
+ interface could display a "Source" link that leads users to an archive
+ of the code. There are many ways you could offer source, and different
+ solutions will be better for different programs; see section 13 for the
+ specific requirements.
+ .
+ You should also get your employer (if you work as a programmer) or
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary. For more information on this, and how to apply and follow
+ the GNU AGPL, see <http://www.gnu.org/licenses/>.
+
+License: ISC
+ Permission to use, copy, modify, and distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+
+License: Apache-2.0
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ .
+ http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+Comment:
+ On Debian systems, the complete text of the Apache License version 2.0 can
+ be found in "/usr/share/common-licenses/Apache-2.0".
+
+License: BSD-3-clause
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the Steinberg Media Technologies nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License: public-domain
+ This work is in public domain.
--- /dev/null
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: FIXME
+Upstream-Contact: FIXME
+Source: FIXME
+Disclaimer: Autogenerated by licensecheck
+
+Files: ./examples/DemoRunner/Source/Demos/DemoPIPs1.cpp
+ ./examples/DemoRunner/Source/Demos/DemoPIPs2.cpp
+ ./examples/DemoRunner/Source/Demos/IntroScreen.h
+ ./examples/DemoRunner/Source/Demos/JUCEDemos.cpp
+ ./examples/DemoRunner/Source/Demos/JUCEDemos.h
+ ./examples/DemoRunner/Source/Main.cpp
+ ./examples/DemoRunner/Source/UI/DemoContentComponent.cpp
+ ./examples/DemoRunner/Source/UI/DemoContentComponent.h
+ ./examples/DemoRunner/Source/UI/MainComponent.cpp
+ ./examples/DemoRunner/Source/UI/MainComponent.h
+ ./examples/DemoRunner/Source/UI/SettingsContent.h
+ ./extras/AudioPerformanceTest/Source/Main.cpp
+ ./extras/AudioPerformanceTest/Source/MainComponent.h
+ ./extras/AudioPluginHost/Source/HostStartup.cpp
+ ./extras/AudioPluginHost/Source/Plugins/IOConfigurationWindow.cpp
+ ./extras/AudioPluginHost/Source/Plugins/IOConfigurationWindow.h
+ ./extras/AudioPluginHost/Source/Plugins/InternalPlugins.cpp
+ ./extras/AudioPluginHost/Source/Plugins/InternalPlugins.h
+ ./extras/AudioPluginHost/Source/Plugins/PluginGraph.cpp
+ ./extras/AudioPluginHost/Source/Plugins/PluginGraph.h
+ ./extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp
+ ./extras/AudioPluginHost/Source/UI/GraphEditorPanel.h
+ ./extras/AudioPluginHost/Source/UI/MainHostWindow.cpp
+ ./extras/AudioPluginHost/Source/UI/MainHostWindow.h
+ ./extras/AudioPluginHost/Source/UI/PluginWindow.h
+ ./extras/BinaryBuilder/Source/Main.cpp
+ ./extras/NetworkGraphicsDemo/Source/Demos.h
+ ./extras/NetworkGraphicsDemo/Source/Main.cpp
+ ./extras/NetworkGraphicsDemo/Source/MasterComponent.h
+ ./extras/NetworkGraphicsDemo/Source/SharedCanvas.h
+ ./extras/NetworkGraphicsDemo/Source/SlaveComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_AboutWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_FloatingToolWindow.h
+ ./extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_PIPCreatorWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_SVGPathDataWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_TranslationToolWindowComponent.h
+ ./extras/Projucer/Source/Application/Windows/jucer_UTF8WindowComponent.h
+ ./extras/Projucer/Source/Application/jucer_Application.cpp
+ ./extras/Projucer/Source/Application/jucer_Application.h
+ ./extras/Projucer/Source/Application/jucer_AutoUpdater.cpp
+ ./extras/Projucer/Source/Application/jucer_AutoUpdater.h
+ ./extras/Projucer/Source/Application/jucer_CommandIDs.h
+ ./extras/Projucer/Source/Application/jucer_CommandLine.cpp
+ ./extras/Projucer/Source/Application/jucer_CommandLine.h
+ ./extras/Projucer/Source/Application/jucer_CommonHeaders.h
+ ./extras/Projucer/Source/Application/jucer_Headers.h
+ ./extras/Projucer/Source/Application/jucer_Main.cpp
+ ./extras/Projucer/Source/Application/jucer_MainWindow.cpp
+ ./extras/Projucer/Source/Application/jucer_MainWindow.h
+ ./extras/Projucer/Source/Application/jucer_ProjucerAnalytics.cpp
+ ./extras/Projucer/Source/Application/jucer_ProjucerAnalytics.h
+ ./extras/Projucer/Source/CodeEditor/jucer_DocumentEditorComponent.cpp
+ ./extras/Projucer/Source/CodeEditor/jucer_DocumentEditorComponent.h
+ ./extras/Projucer/Source/CodeEditor/jucer_ItemPreviewComponent.h
+ ./extras/Projucer/Source/CodeEditor/jucer_LiveBuildCodeEditor.h
+ ./extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.cpp
+ ./extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.h
+ ./extras/Projucer/Source/CodeEditor/jucer_SourceCodeEditor.cpp
+ ./extras/Projucer/Source/CodeEditor/jucer_SourceCodeEditor.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ButtonHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComboBoxHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentNameProperty.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentTypeHandler.cpp
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentTypeHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentUndoableAction.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_GenericComponentHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_GroupComponentHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_HyperlinkButtonHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ImageButtonHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_JucerComponentHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_LabelHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_SliderHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TextButtonHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TextEditorHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ToggleButtonHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TreeViewHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ViewportHandler.h
+ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp
+ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.h
+ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp
+ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ColouredElement.cpp
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ColouredElement.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ElementSiblingComponent.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_FillType.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_GradientPointComponent.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ImageResourceProperty.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElement.cpp
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElement.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementEllipse.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.cpp
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementImage.cpp
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementImage.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementPath.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementRectangle.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementText.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementUndoableAction.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PointComponent.h
+ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_StrokeType.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentBooleanProperty.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentChoiceProperty.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentColourProperty.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentTextProperty.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_FontPropertyComponent.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_JustificationProperty.h
+ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_PositionPropertyBase.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_EditingPanelBase.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_EditingPanelBase.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_JucerCommandIDs.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutineEditor.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutinePanel.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_RelativePositionedRectangle.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ResourceEditorPanel.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ResourceEditorPanel.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_SnapGridPainter.h
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_TestComponent.cpp
+ ./extras/Projucer/Source/ComponentEditor/UI/jucer_TestComponent.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.cpp
+ ./extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_ComponentLayout.cpp
+ ./extras/Projucer/Source/ComponentEditor/jucer_ComponentLayout.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_GeneratedCode.cpp
+ ./extras/Projucer/Source/ComponentEditor/jucer_GeneratedCode.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp
+ ./extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_ObjectTypes.cpp
+ ./extras/Projucer/Source/ComponentEditor/jucer_ObjectTypes.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_PaintRoutine.cpp
+ ./extras/Projucer/Source/ComponentEditor/jucer_PaintRoutine.h
+ ./extras/Projucer/Source/ComponentEditor/jucer_UtilityFunctions.h
+ ./extras/Projucer/Source/Licenses/jucer_LicenseController.cpp
+ ./extras/Projucer/Source/Licenses/jucer_LicenseController.h
+ ./extras/Projucer/Source/Licenses/jucer_LicenseThread.h
+ ./extras/Projucer/Source/Licenses/jucer_LicenseWebview.h
+ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_ActivityListComponent.h
+ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_BuildTabStatusComponent.h
+ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_ComponentListComponent.h
+ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_ErrorListComponent.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_ActivityList.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_ClassDatabase.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_ClientServerMessages.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.cpp
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineDLL.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineServer.cpp
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineServer.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineSettings.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_CppHelpers.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_DiagnosticMessage.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.cpp
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_ErrorList.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_LiveCodeBuilderDLL.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_MessageIDs.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_ProjectBuildInfo.h
+ ./extras/Projucer/Source/LiveBuildEngine/jucer_SourceCodeRange.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ExporterTreeItems.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_FileTreeItems.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_LiveBuildTab.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ProjectTab.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ProjectTreeItemBase.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_TabComponents.h
+ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_TreeItemTypes.h
+ ./extras/Projucer/Source/Project/UI/jucer_ContentViewComponents.h
+ ./extras/Projucer/Source/Project/UI/jucer_FileGroupInformationComponent.h
+ ./extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp
+ ./extras/Projucer/Source/Project/UI/jucer_HeaderComponent.h
+ ./extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h
+ ./extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp
+ ./extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.h
+ ./extras/Projucer/Source/Project/jucer_Module.cpp
+ ./extras/Projucer/Source/Project/jucer_Module.h
+ ./extras/Projucer/Source/Project/jucer_Project.cpp
+ ./extras/Projucer/Source/Project/jucer_Project.h
+ ./extras/Projucer/Source/Project/jucer_ProjectType.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp
+ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_ResourceFile.cpp
+ ./extras/Projucer/Source/ProjectSaving/jucer_ResourceFile.h
+ ./extras/Projucer/Source/ProjectSaving/jucer_XcodeProjectParser.h
+ ./extras/Projucer/Source/Settings/jucer_AppearanceSettings.cpp
+ ./extras/Projucer/Source/Settings/jucer_AppearanceSettings.h
+ ./extras/Projucer/Source/Settings/jucer_StoredSettings.cpp
+ ./extras/Projucer/Source/Settings/jucer_StoredSettings.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_CodeHelpers.cpp
+ ./extras/Projucer/Source/Utility/Helpers/jucer_CodeHelpers.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_Colours.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_FileHelpers.cpp
+ ./extras/Projucer/Source/Utility/Helpers/jucer_FileHelpers.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp
+ ./extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_RelativePath.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_TranslationHelpers.h
+ ./extras/Projucer/Source/Utility/Helpers/jucer_ValueSourceHelpers.h
+ ./extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp
+ ./extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.h
+ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_ColourPropertyComponent.h
+ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h
+ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_LabelPropertyComponent.h
+ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h
+ ./extras/Projucer/Source/Utility/UI/jucer_IconButton.h
+ ./extras/Projucer/Source/Utility/UI/jucer_Icons.cpp
+ ./extras/Projucer/Source/Utility/UI/jucer_Icons.h
+ ./extras/Projucer/Source/Utility/UI/jucer_JucerTreeViewBase.cpp
+ ./extras/Projucer/Source/Utility/UI/jucer_JucerTreeViewBase.h
+ ./extras/Projucer/Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp
+ ./extras/Projucer/Source/Utility/UI/jucer_ProjucerLookAndFeel.h
+ ./extras/Projucer/Source/Utility/UI/jucer_SlidingPanelComponent.cpp
+ ./extras/Projucer/Source/Utility/UI/jucer_SlidingPanelComponent.h
+ ./extras/Projucer/Source/Utility/UI/jucer_UserSettingsPopup.h
+ ./extras/Projucer/Source/Wizards/jucer_NewFileWizard.cpp
+ ./extras/Projucer/Source/Wizards/jucer_NewFileWizard.h
+ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizard.h
+ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.cpp
+ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.h
+ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizardComponent.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_Animated.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioApp.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioPlugin.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_Blank.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_Console.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_DLL.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_GUIApp.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_StaticLibrary.h
+ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_openGL.h
+ ./extras/Projucer/Source/Wizards/jucer_StartPageComponent.h
+ ./extras/Projucer/Source/Wizards/jucer_TemplateThumbnailsComponent.h
+ ./extras/UnitTestRunner/Source/Main.cpp
+ ./modules/juce_analytics/analytics/juce_Analytics.cpp
+ ./modules/juce_analytics/analytics/juce_Analytics.h
+ ./modules/juce_analytics/analytics/juce_ButtonTracker.cpp
+ ./modules/juce_analytics/analytics/juce_ButtonTracker.h
+ ./modules/juce_analytics/destinations/juce_AnalyticsDestination.h
+ ./modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.cpp
+ ./modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.h
+ ./modules/juce_analytics/juce_analytics.cpp
+ ./modules/juce_analytics/juce_analytics.h
+ ./modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp
+ ./modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h
+ ./modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_WavAudioFormat.h
+ ./modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp
+ ./modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h
+ ./modules/juce_audio_formats/format/juce_AudioFormat.cpp
+ ./modules/juce_audio_formats/format/juce_AudioFormat.h
+ ./modules/juce_audio_formats/format/juce_AudioFormatManager.cpp
+ ./modules/juce_audio_formats/format/juce_AudioFormatManager.h
+ ./modules/juce_audio_formats/format/juce_AudioFormatReader.cpp
+ ./modules/juce_audio_formats/format/juce_AudioFormatReader.h
+ ./modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp
+ ./modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h
+ ./modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp
+ ./modules/juce_audio_formats/format/juce_AudioFormatWriter.h
+ ./modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp
+ ./modules/juce_audio_formats/format/juce_AudioSubsectionReader.h
+ ./modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp
+ ./modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h
+ ./modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h
+ ./modules/juce_audio_formats/juce_audio_formats.cpp
+ ./modules/juce_audio_formats/juce_audio_formats.h
+ ./modules/juce_audio_formats/juce_audio_formats.mm
+ ./modules/juce_audio_formats/sampler/juce_Sampler.cpp
+ ./modules/juce_audio_formats/sampler/juce_Sampler.h
+ ./modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h
+ ./modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode2.cpp
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode3.cpp
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode_Header.h
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinUtilities.cpp
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp
+ ./modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp
+ ./modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h
+ ./modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h
+ ./modules/juce_audio_plugin_client/Unity/juce_Unity_Wrapper.cpp
+ ./modules/juce_audio_plugin_client/VST/juce_VSTCallbackHandler.h
+ ./modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+ ./modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm
+ ./modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client.h
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_2.mm
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_1.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_2.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_3.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_4.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.mm
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_VST_utils.mm
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_utils.cpp
+ ./modules/juce_audio_plugin_client/utility/juce_CarbonVisibility.h
+ ./modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h
+ ./modules/juce_audio_plugin_client/utility/juce_FakeMouseMoveGenerator.h
+ ./modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h
+ ./modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h
+ ./modules/juce_audio_plugin_client/utility/juce_PluginHostType.h
+ ./modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp
+ ./modules/juce_audio_plugin_client/utility/juce_WindowsHooks.h
+ ./modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp
+ ./modules/juce_audio_processors/format/juce_AudioPluginFormat.h
+ ./modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp
+ ./modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h
+ ./modules/juce_audio_processors/format_types/juce_AU_Shared.h
+ ./modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h
+ ./modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm
+ ./modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp
+ ./modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h
+ ./modules/juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp
+ ./modules/juce_audio_processors/format_types/juce_VST3Common.h
+ ./modules/juce_audio_processors/format_types/juce_VST3Headers.h
+ ./modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
+ ./modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h
+ ./modules/juce_audio_processors/format_types/juce_VSTCommon.h
+ ./modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h
+ ./modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
+ ./modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h
+ ./modules/juce_audio_processors/juce_audio_processors.cpp
+ ./modules/juce_audio_processors/juce_audio_processors.h
+ ./modules/juce_audio_processors/juce_audio_processors.mm
+ ./modules/juce_audio_processors/processors/juce_AudioPluginInstance.cpp
+ ./modules/juce_audio_processors/processors/juce_AudioPluginInstance.h
+ ./modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
+ ./modules/juce_audio_processors/processors/juce_AudioProcessor.h
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorListener.h
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp
+ ./modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h
+ ./modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp
+ ./modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h
+ ./modules/juce_audio_processors/processors/juce_PluginDescription.cpp
+ ./modules/juce_audio_processors/processors/juce_PluginDescription.h
+ ./modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp
+ ./modules/juce_audio_processors/scanning/juce_KnownPluginList.h
+ ./modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp
+ ./modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h
+ ./modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp
+ ./modules/juce_audio_processors/scanning/juce_PluginListComponent.h
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterBool.h
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterFloat.cpp
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterInt.cpp
+ ./modules/juce_audio_processors/utilities/juce_AudioParameterInt.h
+ ./modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.cpp
+ ./modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h
+ ./modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp
+ ./modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h
+ ./modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp
+ ./modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h
+ ./modules/juce_audio_utils/audio_cd/juce_AudioCDBurner.h
+ ./modules/juce_audio_utils/audio_cd/juce_AudioCDReader.cpp
+ ./modules/juce_audio_utils/audio_cd/juce_AudioCDReader.h
+ ./modules/juce_audio_utils/gui/juce_AudioAppComponent.cpp
+ ./modules/juce_audio_utils/gui/juce_AudioAppComponent.h
+ ./modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp
+ ./modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h
+ ./modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp
+ ./modules/juce_audio_utils/gui/juce_AudioThumbnail.h
+ ./modules/juce_audio_utils/gui/juce_AudioThumbnailBase.h
+ ./modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp
+ ./modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h
+ ./modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.cpp
+ ./modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.h
+ ./modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h
+ ./modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp
+ ./modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h
+ ./modules/juce_audio_utils/juce_audio_utils.cpp
+ ./modules/juce_audio_utils/juce_audio_utils.h
+ ./modules/juce_audio_utils/juce_audio_utils.mm
+ ./modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp
+ ./modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm
+ ./modules/juce_audio_utils/native/juce_linux_AudioCDReader.cpp
+ ./modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp
+ ./modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm
+ ./modules/juce_audio_utils/native/juce_mac_AudioCDReader.mm
+ ./modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm
+ ./modules/juce_audio_utils/native/juce_win32_AudioCDBurner.cpp
+ ./modules/juce_audio_utils/native/juce_win32_AudioCDReader.cpp
+ ./modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp
+ ./modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp
+ ./modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h
+ ./modules/juce_audio_utils/players/juce_SoundPlayer.cpp
+ ./modules/juce_audio_utils/players/juce_SoundPlayer.h
+ ./modules/juce_box2d/juce_box2d.cpp
+ ./modules/juce_box2d/juce_box2d.h
+ ./modules/juce_box2d/utils/juce_Box2DRenderer.cpp
+ ./modules/juce_box2d/utils/juce_Box2DRenderer.h
+ ./modules/juce_cryptography/encryption/juce_BlowFish.cpp
+ ./modules/juce_cryptography/encryption/juce_BlowFish.h
+ ./modules/juce_cryptography/encryption/juce_Primes.cpp
+ ./modules/juce_cryptography/encryption/juce_Primes.h
+ ./modules/juce_cryptography/encryption/juce_RSAKey.cpp
+ ./modules/juce_cryptography/encryption/juce_RSAKey.h
+ ./modules/juce_cryptography/hashing/juce_MD5.cpp
+ ./modules/juce_cryptography/hashing/juce_MD5.h
+ ./modules/juce_cryptography/hashing/juce_SHA256.cpp
+ ./modules/juce_cryptography/hashing/juce_SHA256.h
+ ./modules/juce_cryptography/hashing/juce_Whirlpool.cpp
+ ./modules/juce_cryptography/hashing/juce_Whirlpool.h
+ ./modules/juce_cryptography/juce_cryptography.cpp
+ ./modules/juce_cryptography/juce_cryptography.h
+ ./modules/juce_cryptography/juce_cryptography.mm
+ ./modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp
+ ./modules/juce_data_structures/app_properties/juce_ApplicationProperties.h
+ ./modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp
+ ./modules/juce_data_structures/app_properties/juce_PropertiesFile.h
+ ./modules/juce_data_structures/juce_data_structures.cpp
+ ./modules/juce_data_structures/juce_data_structures.h
+ ./modules/juce_data_structures/juce_data_structures.mm
+ ./modules/juce_data_structures/undomanager/juce_UndoManager.cpp
+ ./modules/juce_data_structures/undomanager/juce_UndoManager.h
+ ./modules/juce_data_structures/undomanager/juce_UndoableAction.h
+ ./modules/juce_data_structures/values/juce_CachedValue.cpp
+ ./modules/juce_data_structures/values/juce_CachedValue.h
+ ./modules/juce_data_structures/values/juce_Value.cpp
+ ./modules/juce_data_structures/values/juce_Value.h
+ ./modules/juce_data_structures/values/juce_ValueTree.cpp
+ ./modules/juce_data_structures/values/juce_ValueTree.h
+ ./modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp
+ ./modules/juce_data_structures/values/juce_ValueTreeSynchroniser.h
+ ./modules/juce_data_structures/values/juce_ValueWithDefault.cpp
+ ./modules/juce_data_structures/values/juce_ValueWithDefault.h
+ ./modules/juce_dsp/containers/juce_AudioBlock.h
+ ./modules/juce_dsp/containers/juce_SIMDRegister.h
+ ./modules/juce_dsp/containers/juce_SIMDRegister_Impl.h
+ ./modules/juce_dsp/containers/juce_SIMDRegister_test.cpp
+ ./modules/juce_dsp/filter_design/juce_FilterDesign.cpp
+ ./modules/juce_dsp/filter_design/juce_FilterDesign.h
+ ./modules/juce_dsp/frequency/juce_Convolution.cpp
+ ./modules/juce_dsp/frequency/juce_Convolution.h
+ ./modules/juce_dsp/frequency/juce_FFT.cpp
+ ./modules/juce_dsp/frequency/juce_FFT.h
+ ./modules/juce_dsp/frequency/juce_FFT_test.cpp
+ ./modules/juce_dsp/frequency/juce_Windowing.cpp
+ ./modules/juce_dsp/frequency/juce_Windowing.h
+ ./modules/juce_dsp/juce_dsp.cpp
+ ./modules/juce_dsp/juce_dsp.h
+ ./modules/juce_dsp/juce_dsp.mm
+ ./modules/juce_dsp/maths/juce_FastMathApproximations.h
+ ./modules/juce_dsp/maths/juce_LogRampedValue.h
+ ./modules/juce_dsp/maths/juce_LogRampedValue_test.cpp
+ ./modules/juce_dsp/maths/juce_LookupTable.cpp
+ ./modules/juce_dsp/maths/juce_LookupTable.h
+ ./modules/juce_dsp/maths/juce_Matrix.cpp
+ ./modules/juce_dsp/maths/juce_Matrix.h
+ ./modules/juce_dsp/maths/juce_Matrix_test.cpp
+ ./modules/juce_dsp/maths/juce_Phase.h
+ ./modules/juce_dsp/maths/juce_Polynomial.h
+ ./modules/juce_dsp/maths/juce_SpecialFunctions.cpp
+ ./modules/juce_dsp/maths/juce_SpecialFunctions.h
+ ./modules/juce_dsp/native/juce_avx_SIMDNativeOps.cpp
+ ./modules/juce_dsp/native/juce_avx_SIMDNativeOps.h
+ ./modules/juce_dsp/native/juce_fallback_SIMDNativeOps.h
+ ./modules/juce_dsp/native/juce_neon_SIMDNativeOps.cpp
+ ./modules/juce_dsp/native/juce_neon_SIMDNativeOps.h
+ ./modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp
+ ./modules/juce_dsp/native/juce_sse_SIMDNativeOps.h
+ ./modules/juce_dsp/processors/juce_Bias.h
+ ./modules/juce_dsp/processors/juce_FIRFilter.cpp
+ ./modules/juce_dsp/processors/juce_FIRFilter.h
+ ./modules/juce_dsp/processors/juce_FIRFilter_test.cpp
+ ./modules/juce_dsp/processors/juce_Gain.h
+ ./modules/juce_dsp/processors/juce_IIRFilter.cpp
+ ./modules/juce_dsp/processors/juce_IIRFilter.h
+ ./modules/juce_dsp/processors/juce_IIRFilter_Impl.h
+ ./modules/juce_dsp/processors/juce_LadderFilter.cpp
+ ./modules/juce_dsp/processors/juce_LadderFilter.h
+ ./modules/juce_dsp/processors/juce_Oscillator.h
+ ./modules/juce_dsp/processors/juce_Oversampling.cpp
+ ./modules/juce_dsp/processors/juce_Oversampling.h
+ ./modules/juce_dsp/processors/juce_ProcessContext.h
+ ./modules/juce_dsp/processors/juce_ProcessorChain.h
+ ./modules/juce_dsp/processors/juce_ProcessorDuplicator.h
+ ./modules/juce_dsp/processors/juce_ProcessorWrapper.h
+ ./modules/juce_dsp/processors/juce_Reverb.h
+ ./modules/juce_dsp/processors/juce_StateVariableFilter.h
+ ./modules/juce_dsp/processors/juce_WaveShaper.h
+ ./modules/juce_graphics/colour/juce_Colour.cpp
+ ./modules/juce_graphics/colour/juce_Colour.h
+ ./modules/juce_graphics/colour/juce_ColourGradient.cpp
+ ./modules/juce_graphics/colour/juce_ColourGradient.h
+ ./modules/juce_graphics/colour/juce_Colours.cpp
+ ./modules/juce_graphics/colour/juce_Colours.h
+ ./modules/juce_graphics/colour/juce_FillType.cpp
+ ./modules/juce_graphics/colour/juce_FillType.h
+ ./modules/juce_graphics/colour/juce_PixelFormats.h
+ ./modules/juce_graphics/contexts/juce_GraphicsContext.cpp
+ ./modules/juce_graphics/contexts/juce_GraphicsContext.h
+ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h
+ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp
+ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h
+ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp
+ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h
+ ./modules/juce_graphics/effects/juce_DropShadowEffect.cpp
+ ./modules/juce_graphics/effects/juce_DropShadowEffect.h
+ ./modules/juce_graphics/effects/juce_GlowEffect.cpp
+ ./modules/juce_graphics/effects/juce_GlowEffect.h
+ ./modules/juce_graphics/effects/juce_ImageEffectFilter.h
+ ./modules/juce_graphics/fonts/juce_AttributedString.cpp
+ ./modules/juce_graphics/fonts/juce_AttributedString.h
+ ./modules/juce_graphics/fonts/juce_CustomTypeface.cpp
+ ./modules/juce_graphics/fonts/juce_CustomTypeface.h
+ ./modules/juce_graphics/fonts/juce_Font.cpp
+ ./modules/juce_graphics/fonts/juce_Font.h
+ ./modules/juce_graphics/fonts/juce_GlyphArrangement.cpp
+ ./modules/juce_graphics/fonts/juce_GlyphArrangement.h
+ ./modules/juce_graphics/fonts/juce_TextLayout.cpp
+ ./modules/juce_graphics/fonts/juce_TextLayout.h
+ ./modules/juce_graphics/fonts/juce_Typeface.cpp
+ ./modules/juce_graphics/fonts/juce_Typeface.h
+ ./modules/juce_graphics/geometry/juce_AffineTransform.cpp
+ ./modules/juce_graphics/geometry/juce_AffineTransform.h
+ ./modules/juce_graphics/geometry/juce_BorderSize.h
+ ./modules/juce_graphics/geometry/juce_EdgeTable.cpp
+ ./modules/juce_graphics/geometry/juce_EdgeTable.h
+ ./modules/juce_graphics/geometry/juce_Line.h
+ ./modules/juce_graphics/geometry/juce_Parallelogram.h
+ ./modules/juce_graphics/geometry/juce_Path.cpp
+ ./modules/juce_graphics/geometry/juce_Path.h
+ ./modules/juce_graphics/geometry/juce_PathIterator.cpp
+ ./modules/juce_graphics/geometry/juce_PathIterator.h
+ ./modules/juce_graphics/geometry/juce_PathStrokeType.cpp
+ ./modules/juce_graphics/geometry/juce_PathStrokeType.h
+ ./modules/juce_graphics/geometry/juce_Point.h
+ ./modules/juce_graphics/geometry/juce_Rectangle.h
+ ./modules/juce_graphics/geometry/juce_RectangleList.h
+ ./modules/juce_graphics/image_formats/juce_GIFLoader.cpp
+ ./modules/juce_graphics/image_formats/juce_JPEGLoader.cpp
+ ./modules/juce_graphics/image_formats/juce_PNGLoader.cpp
+ ./modules/juce_graphics/images/juce_Image.cpp
+ ./modules/juce_graphics/images/juce_Image.h
+ ./modules/juce_graphics/images/juce_ImageCache.cpp
+ ./modules/juce_graphics/images/juce_ImageCache.h
+ ./modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp
+ ./modules/juce_graphics/images/juce_ImageConvolutionKernel.h
+ ./modules/juce_graphics/images/juce_ImageFileFormat.cpp
+ ./modules/juce_graphics/images/juce_ImageFileFormat.h
+ ./modules/juce_graphics/juce_graphics.cpp
+ ./modules/juce_graphics/juce_graphics.h
+ ./modules/juce_graphics/juce_graphics.mm
+ ./modules/juce_graphics/native/juce_RenderingHelpers.h
+ ./modules/juce_graphics/native/juce_android_Fonts.cpp
+ ./modules/juce_graphics/native/juce_android_GraphicsContext.cpp
+ ./modules/juce_graphics/native/juce_android_IconHelpers.cpp
+ ./modules/juce_graphics/native/juce_freetype_Fonts.cpp
+ ./modules/juce_graphics/native/juce_linux_Fonts.cpp
+ ./modules/juce_graphics/native/juce_linux_IconHelpers.cpp
+ ./modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h
+ ./modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm
+ ./modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h
+ ./modules/juce_graphics/native/juce_mac_Fonts.mm
+ ./modules/juce_graphics/native/juce_mac_IconHelpers.cpp
+ ./modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp
+ ./modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.h
+ ./modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp
+ ./modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp
+ ./modules/juce_graphics/native/juce_win32_Fonts.cpp
+ ./modules/juce_graphics/native/juce_win32_IconHelpers.cpp
+ ./modules/juce_graphics/placement/juce_Justification.h
+ ./modules/juce_graphics/placement/juce_RectanglePlacement.cpp
+ ./modules/juce_graphics/placement/juce_RectanglePlacement.h
+ ./modules/juce_gui_basics/application/juce_Application.cpp
+ ./modules/juce_gui_basics/application/juce_Application.h
+ ./modules/juce_gui_basics/buttons/juce_ArrowButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_ArrowButton.h
+ ./modules/juce_gui_basics/buttons/juce_Button.cpp
+ ./modules/juce_gui_basics/buttons/juce_Button.h
+ ./modules/juce_gui_basics/buttons/juce_DrawableButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_DrawableButton.h
+ ./modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_HyperlinkButton.h
+ ./modules/juce_gui_basics/buttons/juce_ImageButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_ImageButton.h
+ ./modules/juce_gui_basics/buttons/juce_ShapeButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_ShapeButton.h
+ ./modules/juce_gui_basics/buttons/juce_TextButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_TextButton.h
+ ./modules/juce_gui_basics/buttons/juce_ToggleButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_ToggleButton.h
+ ./modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp
+ ./modules/juce_gui_basics/buttons/juce_ToolbarButton.h
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandID.h
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp
+ ./modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h
+ ./modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp
+ ./modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h
+ ./modules/juce_gui_basics/components/juce_CachedComponentImage.h
+ ./modules/juce_gui_basics/components/juce_Component.cpp
+ ./modules/juce_gui_basics/components/juce_Component.h
+ ./modules/juce_gui_basics/components/juce_ComponentListener.cpp
+ ./modules/juce_gui_basics/components/juce_ComponentListener.h
+ ./modules/juce_gui_basics/components/juce_ModalComponentManager.cpp
+ ./modules/juce_gui_basics/components/juce_ModalComponentManager.h
+ ./modules/juce_gui_basics/desktop/juce_Desktop.cpp
+ ./modules/juce_gui_basics/desktop/juce_Desktop.h
+ ./modules/juce_gui_basics/desktop/juce_Displays.cpp
+ ./modules/juce_gui_basics/desktop/juce_Displays.h
+ ./modules/juce_gui_basics/drawables/juce_Drawable.cpp
+ ./modules/juce_gui_basics/drawables/juce_Drawable.h
+ ./modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp
+ ./modules/juce_gui_basics/drawables/juce_DrawableComposite.h
+ ./modules/juce_gui_basics/drawables/juce_DrawableImage.cpp
+ ./modules/juce_gui_basics/drawables/juce_DrawableImage.h
+ ./modules/juce_gui_basics/drawables/juce_DrawablePath.cpp
+ ./modules/juce_gui_basics/drawables/juce_DrawablePath.h
+ ./modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp
+ ./modules/juce_gui_basics/drawables/juce_DrawableRectangle.h
+ ./modules/juce_gui_basics/drawables/juce_DrawableShape.cpp
+ ./modules/juce_gui_basics/drawables/juce_DrawableShape.h
+ ./modules/juce_gui_basics/drawables/juce_DrawableText.cpp
+ ./modules/juce_gui_basics/drawables/juce_DrawableText.h
+ ./modules/juce_gui_basics/drawables/juce_SVGParser.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_ContentSharer.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_ContentSharer.h
+ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FileChooser.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FileListComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h
+ ./modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp
+ ./modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h
+ ./modules/juce_gui_basics/juce_gui_basics.cpp
+ ./modules/juce_gui_basics/juce_gui_basics.h
+ ./modules/juce_gui_basics/juce_gui_basics.mm
+ ./modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp
+ ./modules/juce_gui_basics/keyboard/juce_CaretComponent.h
+ ./modules/juce_gui_basics/keyboard/juce_KeyListener.cpp
+ ./modules/juce_gui_basics/keyboard/juce_KeyListener.h
+ ./modules/juce_gui_basics/keyboard/juce_KeyPress.cpp
+ ./modules/juce_gui_basics/keyboard/juce_KeyPress.h
+ ./modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp
+ ./modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h
+ ./modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp
+ ./modules/juce_gui_basics/keyboard/juce_ModifierKeys.h
+ ./modules/juce_gui_basics/keyboard/juce_SystemClipboard.h
+ ./modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h
+ ./modules/juce_gui_basics/keyboard/juce_TextInputTarget.h
+ ./modules/juce_gui_basics/layout/juce_AnimatedPosition.h
+ ./modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h
+ ./modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp
+ ./modules/juce_gui_basics/layout/juce_ComponentAnimator.h
+ ./modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp
+ ./modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h
+ ./modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp
+ ./modules/juce_gui_basics/layout/juce_ComponentBuilder.h
+ ./modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp
+ ./modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h
+ ./modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp
+ ./modules/juce_gui_basics/layout/juce_ConcertinaPanel.h
+ ./modules/juce_gui_basics/layout/juce_FlexBox.cpp
+ ./modules/juce_gui_basics/layout/juce_FlexBox.h
+ ./modules/juce_gui_basics/layout/juce_FlexItem.h
+ ./modules/juce_gui_basics/layout/juce_Grid.cpp
+ ./modules/juce_gui_basics/layout/juce_Grid.h
+ ./modules/juce_gui_basics/layout/juce_GridItem.cpp
+ ./modules/juce_gui_basics/layout/juce_GridItem.h
+ ./modules/juce_gui_basics/layout/juce_GroupComponent.cpp
+ ./modules/juce_gui_basics/layout/juce_GroupComponent.h
+ ./modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp
+ ./modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h
+ ./modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp
+ ./modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h
+ ./modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp
+ ./modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h
+ ./modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp
+ ./modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h
+ ./modules/juce_gui_basics/layout/juce_ScrollBar.cpp
+ ./modules/juce_gui_basics/layout/juce_ScrollBar.h
+ ./modules/juce_gui_basics/layout/juce_SidePanel.cpp
+ ./modules/juce_gui_basics/layout/juce_SidePanel.h
+ ./modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp
+ ./modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h
+ ./modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp
+ ./modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h
+ ./modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp
+ ./modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h
+ ./modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp
+ ./modules/juce_gui_basics/layout/juce_TabbedButtonBar.h
+ ./modules/juce_gui_basics/layout/juce_TabbedComponent.cpp
+ ./modules/juce_gui_basics/layout/juce_TabbedComponent.h
+ ./modules/juce_gui_basics/layout/juce_Viewport.cpp
+ ./modules/juce_gui_basics/layout/juce_Viewport.h
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp
+ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.h
+ ./modules/juce_gui_basics/menus/juce_BurgerMenuComponent.cpp
+ ./modules/juce_gui_basics/menus/juce_BurgerMenuComponent.h
+ ./modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp
+ ./modules/juce_gui_basics/menus/juce_MenuBarComponent.h
+ ./modules/juce_gui_basics/menus/juce_MenuBarModel.cpp
+ ./modules/juce_gui_basics/menus/juce_MenuBarModel.h
+ ./modules/juce_gui_basics/menus/juce_PopupMenu.cpp
+ ./modules/juce_gui_basics/menus/juce_PopupMenu.h
+ ./modules/juce_gui_basics/misc/juce_BubbleComponent.cpp
+ ./modules/juce_gui_basics/misc/juce_BubbleComponent.h
+ ./modules/juce_gui_basics/misc/juce_DropShadower.cpp
+ ./modules/juce_gui_basics/misc/juce_DropShadower.h
+ ./modules/juce_gui_basics/misc/juce_JUCESplashScreen.cpp
+ ./modules/juce_gui_basics/misc/juce_JUCESplashScreen.h
+ ./modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp
+ ./modules/juce_gui_basics/mouse/juce_ComponentDragger.h
+ ./modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp
+ ./modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h
+ ./modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h
+ ./modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h
+ ./modules/juce_gui_basics/mouse/juce_LassoComponent.h
+ ./modules/juce_gui_basics/mouse/juce_MouseCursor.cpp
+ ./modules/juce_gui_basics/mouse/juce_MouseCursor.h
+ ./modules/juce_gui_basics/mouse/juce_MouseEvent.cpp
+ ./modules/juce_gui_basics/mouse/juce_MouseEvent.h
+ ./modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp
+ ./modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h
+ ./modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp
+ ./modules/juce_gui_basics/mouse/juce_MouseInputSource.h
+ ./modules/juce_gui_basics/mouse/juce_MouseListener.cpp
+ ./modules/juce_gui_basics/mouse/juce_MouseListener.h
+ ./modules/juce_gui_basics/mouse/juce_SelectedItemSet.h
+ ./modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h
+ ./modules/juce_gui_basics/mouse/juce_TooltipClient.h
+ ./modules/juce_gui_basics/native/juce_MultiTouchMapper.h
+ ./modules/juce_gui_basics/native/juce_android_ContentSharer.cpp
+ ./modules/juce_gui_basics/native/juce_android_FileChooser.cpp
+ ./modules/juce_gui_basics/native/juce_android_Windowing.cpp
+ ./modules/juce_gui_basics/native/juce_common_MimeTypes.cpp
+ ./modules/juce_gui_basics/native/juce_ios_ContentSharer.cpp
+ ./modules/juce_gui_basics/native/juce_ios_FileChooser.mm
+ ./modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm
+ ./modules/juce_gui_basics/native/juce_ios_Windowing.mm
+ ./modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
+ ./modules/juce_gui_basics/native/juce_linux_X11.cpp
+ ./modules/juce_gui_basics/native/juce_linux_X11.h
+ ./modules/juce_gui_basics/native/juce_linux_X11_Clipboard.cpp
+ ./modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp
+ ./modules/juce_gui_basics/native/juce_mac_FileChooser.mm
+ ./modules/juce_gui_basics/native/juce_mac_MainMenu.mm
+ ./modules/juce_gui_basics/native/juce_mac_MouseCursor.mm
+ ./modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
+ ./modules/juce_gui_basics/native/juce_mac_Windowing.mm
+ ./modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp
+ ./modules/juce_gui_basics/native/juce_win32_FileChooser.cpp
+ ./modules/juce_gui_basics/native/juce_win32_Windowing.cpp
+ ./modules/juce_gui_basics/positioning/juce_MarkerList.cpp
+ ./modules/juce_gui_basics/positioning/juce_MarkerList.h
+ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp
+ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h
+ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp
+ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h
+ ./modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp
+ ./modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h
+ ./modules/juce_gui_basics/positioning/juce_RelativePoint.cpp
+ ./modules/juce_gui_basics/positioning/juce_RelativePoint.h
+ ./modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp
+ ./modules/juce_gui_basics/positioning/juce_RelativePointPath.h
+ ./modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp
+ ./modules/juce_gui_basics/positioning/juce_RelativeRectangle.h
+ ./modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h
+ ./modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h
+ ./modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h
+ ./modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.h
+ ./modules/juce_gui_basics/properties/juce_PropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_PropertyComponent.h
+ ./modules/juce_gui_basics/properties/juce_PropertyPanel.cpp
+ ./modules/juce_gui_basics/properties/juce_PropertyPanel.h
+ ./modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h
+ ./modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp
+ ./modules/juce_gui_basics/properties/juce_TextPropertyComponent.h
+ ./modules/juce_gui_basics/widgets/juce_ComboBox.cpp
+ ./modules/juce_gui_basics/widgets/juce_ComboBox.h
+ ./modules/juce_gui_basics/widgets/juce_ImageComponent.cpp
+ ./modules/juce_gui_basics/widgets/juce_ImageComponent.h
+ ./modules/juce_gui_basics/widgets/juce_Label.cpp
+ ./modules/juce_gui_basics/widgets/juce_Label.h
+ ./modules/juce_gui_basics/widgets/juce_ListBox.cpp
+ ./modules/juce_gui_basics/widgets/juce_ListBox.h
+ ./modules/juce_gui_basics/widgets/juce_ProgressBar.cpp
+ ./modules/juce_gui_basics/widgets/juce_ProgressBar.h
+ ./modules/juce_gui_basics/widgets/juce_Slider.cpp
+ ./modules/juce_gui_basics/widgets/juce_Slider.h
+ ./modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp
+ ./modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h
+ ./modules/juce_gui_basics/widgets/juce_TableListBox.cpp
+ ./modules/juce_gui_basics/widgets/juce_TableListBox.h
+ ./modules/juce_gui_basics/widgets/juce_TextEditor.cpp
+ ./modules/juce_gui_basics/widgets/juce_TextEditor.h
+ ./modules/juce_gui_basics/widgets/juce_Toolbar.cpp
+ ./modules/juce_gui_basics/widgets/juce_Toolbar.h
+ ./modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp
+ ./modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h
+ ./modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h
+ ./modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp
+ ./modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h
+ ./modules/juce_gui_basics/widgets/juce_TreeView.cpp
+ ./modules/juce_gui_basics/widgets/juce_TreeView.h
+ ./modules/juce_gui_basics/windows/juce_AlertWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_AlertWindow.h
+ ./modules/juce_gui_basics/windows/juce_CallOutBox.cpp
+ ./modules/juce_gui_basics/windows/juce_CallOutBox.h
+ ./modules/juce_gui_basics/windows/juce_ComponentPeer.cpp
+ ./modules/juce_gui_basics/windows/juce_ComponentPeer.h
+ ./modules/juce_gui_basics/windows/juce_DialogWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_DialogWindow.h
+ ./modules/juce_gui_basics/windows/juce_DocumentWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_DocumentWindow.h
+ ./modules/juce_gui_basics/windows/juce_NativeMessageBox.h
+ ./modules/juce_gui_basics/windows/juce_ResizableWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_ResizableWindow.h
+ ./modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h
+ ./modules/juce_gui_basics/windows/juce_TooltipWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_TooltipWindow.h
+ ./modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp
+ ./modules/juce_gui_basics/windows/juce_TopLevelWindow.h
+ ./modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp
+ ./modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h
+ ./modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h
+ ./modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp
+ ./modules/juce_gui_extra/code_editor/juce_CodeDocument.h
+ ./modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp
+ ./modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h
+ ./modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h
+ ./modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp
+ ./modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h
+ ./modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp
+ ./modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h
+ ./modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp
+ ./modules/juce_gui_extra/documents/juce_FileBasedDocument.h
+ ./modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h
+ ./modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h
+ ./modules/juce_gui_extra/embedding/juce_NSViewComponent.h
+ ./modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h
+ ./modules/juce_gui_extra/embedding/juce_UIViewComponent.h
+ ./modules/juce_gui_extra/embedding/juce_XEmbedComponent.h
+ ./modules/juce_gui_extra/juce_gui_extra.cpp
+ ./modules/juce_gui_extra/juce_gui_extra.h
+ ./modules/juce_gui_extra/juce_gui_extra.mm
+ ./modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp
+ ./modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h
+ ./modules/juce_gui_extra/misc/juce_AppleRemote.h
+ ./modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp
+ ./modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h
+ ./modules/juce_gui_extra/misc/juce_ColourSelector.cpp
+ ./modules/juce_gui_extra/misc/juce_ColourSelector.h
+ ./modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp
+ ./modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h
+ ./modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp
+ ./modules/juce_gui_extra/misc/juce_LiveConstantEditor.h
+ ./modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp
+ ./modules/juce_gui_extra/misc/juce_PreferencesPanel.h
+ ./modules/juce_gui_extra/misc/juce_PushNotifications.cpp
+ ./modules/juce_gui_extra/misc/juce_PushNotifications.h
+ ./modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp
+ ./modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h
+ ./modules/juce_gui_extra/misc/juce_SplashScreen.cpp
+ ./modules/juce_gui_extra/misc/juce_SplashScreen.h
+ ./modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp
+ ./modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h
+ ./modules/juce_gui_extra/misc/juce_WebBrowserComponent.h
+ ./modules/juce_gui_extra/native/juce_AndroidViewComponent.cpp
+ ./modules/juce_gui_extra/native/juce_android_PushNotifications.cpp
+ ./modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp
+ ./modules/juce_gui_extra/native/juce_ios_PushNotifications.cpp
+ ./modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm
+ ./modules/juce_gui_extra/native/juce_linux_X11_SystemTrayIcon.cpp
+ ./modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp
+ ./modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp
+ ./modules/juce_gui_extra/native/juce_mac_AppleRemote.mm
+ ./modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h
+ ./modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm
+ ./modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp
+ ./modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp
+ ./modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm
+ ./modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp
+ ./modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp
+ ./modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp
+ ./modules/juce_opengl/geometry/juce_Draggable3DOrientation.h
+ ./modules/juce_opengl/geometry/juce_Matrix3D.h
+ ./modules/juce_opengl/geometry/juce_Quaternion.h
+ ./modules/juce_opengl/geometry/juce_Vector3D.h
+ ./modules/juce_opengl/juce_opengl.cpp
+ ./modules/juce_opengl/juce_opengl.h
+ ./modules/juce_opengl/juce_opengl.mm
+ ./modules/juce_opengl/native/juce_MissingGLDefinitions.h
+ ./modules/juce_opengl/native/juce_OpenGLExtensions.h
+ ./modules/juce_opengl/native/juce_OpenGL_android.h
+ ./modules/juce_opengl/native/juce_OpenGL_ios.h
+ ./modules/juce_opengl/native/juce_OpenGL_linux_X11.h
+ ./modules/juce_opengl/native/juce_OpenGL_osx.h
+ ./modules/juce_opengl/native/juce_OpenGL_win32.h
+ ./modules/juce_opengl/opengl/juce_OpenGLContext.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLContext.h
+ ./modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h
+ ./modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h
+ ./modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLHelpers.h
+ ./modules/juce_opengl/opengl/juce_OpenGLImage.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLImage.h
+ ./modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h
+ ./modules/juce_opengl/opengl/juce_OpenGLRenderer.h
+ ./modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h
+ ./modules/juce_opengl/opengl/juce_OpenGLTexture.cpp
+ ./modules/juce_opengl/opengl/juce_OpenGLTexture.h
+ ./modules/juce_opengl/utils/juce_OpenGLAppComponent.cpp
+ ./modules/juce_opengl/utils/juce_OpenGLAppComponent.h
+ ./modules/juce_osc/juce_osc.cpp
+ ./modules/juce_osc/juce_osc.h
+ ./modules/juce_osc/osc/juce_OSCAddress.cpp
+ ./modules/juce_osc/osc/juce_OSCAddress.h
+ ./modules/juce_osc/osc/juce_OSCArgument.cpp
+ ./modules/juce_osc/osc/juce_OSCArgument.h
+ ./modules/juce_osc/osc/juce_OSCBundle.cpp
+ ./modules/juce_osc/osc/juce_OSCBundle.h
+ ./modules/juce_osc/osc/juce_OSCMessage.cpp
+ ./modules/juce_osc/osc/juce_OSCMessage.h
+ ./modules/juce_osc/osc/juce_OSCReceiver.cpp
+ ./modules/juce_osc/osc/juce_OSCReceiver.h
+ ./modules/juce_osc/osc/juce_OSCSender.cpp
+ ./modules/juce_osc/osc/juce_OSCSender.h
+ ./modules/juce_osc/osc/juce_OSCTimeTag.cpp
+ ./modules/juce_osc/osc/juce_OSCTimeTag.h
+ ./modules/juce_osc/osc/juce_OSCTypes.cpp
+ ./modules/juce_osc/osc/juce_OSCTypes.h
+ ./modules/juce_product_unlocking/in_app_purchases/juce_InAppPurchases.cpp
+ ./modules/juce_product_unlocking/in_app_purchases/juce_InAppPurchases.h
+ ./modules/juce_product_unlocking/juce_product_unlocking.cpp
+ ./modules/juce_product_unlocking/juce_product_unlocking.h
+ ./modules/juce_product_unlocking/marketplace/juce_KeyFileGeneration.h
+ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockForm.cpp
+ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockForm.h
+ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockStatus.cpp
+ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockStatus.h
+ ./modules/juce_product_unlocking/marketplace/juce_TracktionMarketplaceStatus.cpp
+ ./modules/juce_product_unlocking/marketplace/juce_TracktionMarketplaceStatus.h
+ ./modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp
+ ./modules/juce_product_unlocking/native/juce_ios_InAppPurchases.cpp
+ ./modules/juce_video/capture/juce_CameraDevice.cpp
+ ./modules/juce_video/capture/juce_CameraDevice.h
+ ./modules/juce_video/juce_video.cpp
+ ./modules/juce_video/juce_video.h
+ ./modules/juce_video/juce_video.mm
+ ./modules/juce_video/native/juce_android_CameraDevice.h
+ ./modules/juce_video/native/juce_ios_CameraDevice.h
+ ./modules/juce_video/native/juce_mac_CameraDevice.h
+ ./modules/juce_video/native/juce_win32_CameraDevice.h
+ ./modules/juce_video/native/juce_win32_Video.h
+ ./modules/juce_video/playback/juce_VideoComponent.cpp
+ ./modules/juce_video/playback/juce_VideoComponent.h
+Copyright: 2017, - ROLI Ltd.
+License: GPL-3
+ FIXME
+
+Files: ./.github/ISSUE_TEMPLATE.txt
+ ./.gitlab-ci.yml
+ ./BREAKING-CHANGES.txt
+ ./ChangeList.txt
+ ./doxygen/Doxyfile
+ ./doxygen/Makefile
+ ./doxygen/README.txt
+ ./doxygen/make.bat
+ ./doxygen/process_source_files.py
+ ./examples/Assets/Box2DTests/AddPair.h
+ ./examples/Assets/Signing/README.txt
+ ./examples/Assets/demo table data.xml
+ ./examples/Assets/google-services.json
+ ./examples/Assets/juce_module_info
+ ./examples/Assets/proaudio.path
+ ./examples/Assets/teapot.obj
+ ./examples/Assets/treedemo.xml
+ ./examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+ ./examples/DemoRunner/Builds/Android/app/build.gradle
+ ./examples/DemoRunner/Builds/Android/app/src/debug/res/values/string.xml
+ ./examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/AddPair.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Signing/README.txt
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/demo table data.xml
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/google-services.json
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/juce_module_info
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/proaudio.path
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/teapot.obj
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/treedemo.xml
+ ./examples/DemoRunner/Builds/Android/app/src/release/res/values/string.xml
+ ./examples/DemoRunner/Builds/Android/build.gradle
+ ./examples/DemoRunner/Builds/Android/gradle/wrapper/gradle-wrapper.properties
+ ./examples/DemoRunner/Builds/Android/gradlew
+ ./examples/DemoRunner/Builds/Android/gradlew.bat
+ ./examples/DemoRunner/Builds/Android/settings.gradle
+ ./examples/DemoRunner/Builds/LinuxMakefile/Makefile
+ ./examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj
+ ./examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./examples/DemoRunner/Builds/VisualStudio2015/DemoRunner.sln
+ ./examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj
+ ./examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters
+ ./examples/DemoRunner/Builds/VisualStudio2017/DemoRunner.sln
+ ./examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
+ ./examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
+ ./examples/DemoRunner/Builds/VisualStudio2019/DemoRunner.sln
+ ./examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+ ./examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+ ./examples/DemoRunner/Builds/iOS/DemoRunner.entitlements
+ ./examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj
+ ./examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./examples/DemoRunner/Builds/iOS/DemoRunner/Images.xcassets/AppIcon.appiconset/Contents.json
+ ./examples/DemoRunner/Builds/iOS/DemoRunner/Images.xcassets/LaunchImage.launchimage/Contents.json
+ ./examples/DemoRunner/Builds/iOS/LaunchScreen.storyboard
+ ./examples/DemoRunner/JuceLibraryCode/JuceHeader.h
+ ./examples/DemoRunner/JuceLibraryCode/ReadMe.txt
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_analytics.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_basics.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_basics.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_devices.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_devices.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_formats.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_formats.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_processors.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_processors.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_utils.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_utils.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_blocks_basics.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_box2d.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_core.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_core.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_cryptography.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_cryptography.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_data_structures.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_data_structures.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_dsp.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_dsp.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_events.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_events.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_graphics.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_graphics.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_basics.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_extra.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_opengl.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_opengl.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_osc.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_product_unlocking.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_product_unlocking.mm
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_video.cpp
+ ./examples/DemoRunner/JuceLibraryCode/include_juce_video.mm
+ ./extras/AudioPerformanceTest/AudioPerformanceTest.jucer
+ ./extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+ ./extras/AudioPerformanceTest/Builds/Android/app/build.gradle
+ ./extras/AudioPerformanceTest/Builds/Android/app/src/debug/res/values/string.xml
+ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/AndroidManifest.xml
+ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/SharingContentProvider.java
+ ./extras/AudioPerformanceTest/Builds/Android/app/src/release/res/values/string.xml
+ ./extras/AudioPerformanceTest/Builds/Android/build.gradle
+ ./extras/AudioPerformanceTest/Builds/Android/gradle/wrapper/gradle-wrapper.properties
+ ./extras/AudioPerformanceTest/Builds/Android/gradlew
+ ./extras/AudioPerformanceTest/Builds/Android/gradlew.bat
+ ./extras/AudioPerformanceTest/Builds/Android/settings.gradle
+ ./extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile
+ ./extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj
+ ./extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/AudioPerformanceTest/Builds/MacOSX/Info-App.plist
+ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/AudioPerformanceTest.sln
+ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/AudioPerformanceTest_App.vcxproj
+ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/AudioPerformanceTest_App.vcxproj.filters
+ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/resources.rc
+ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj
+ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest/Images.xcassets/AppIcon.appiconset/Contents.json
+ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest/Images.xcassets/LaunchImage.launchimage/Contents.json
+ ./extras/AudioPerformanceTest/Builds/iOS/Info-App.plist
+ ./extras/AudioPerformanceTest/Builds/iOS/LaunchScreen.storyboard
+ ./extras/AudioPerformanceTest/JuceLibraryCode/JuceHeader.h
+ ./extras/AudioPerformanceTest/JuceLibraryCode/ReadMe.txt
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_basics.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_basics.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_devices.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_devices.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_formats.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_formats.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_processors.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_processors.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_utils.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_utils.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_core.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_core.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_data_structures.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_data_structures.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_events.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_events.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_graphics.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_graphics.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_basics.mm
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_extra.mm
+ ./extras/AudioPluginHost/AudioPluginHost.jucer
+ ./extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+ ./extras/AudioPluginHost/Builds/Android/app/build.gradle
+ ./extras/AudioPluginHost/Builds/Android/app/src/debug/res/values/string.xml
+ ./extras/AudioPluginHost/Builds/Android/app/src/main/AndroidManifest.xml
+ ./extras/AudioPluginHost/Builds/Android/app/src/release/res/values/string.xml
+ ./extras/AudioPluginHost/Builds/Android/build.gradle
+ ./extras/AudioPluginHost/Builds/Android/gradle/wrapper/gradle-wrapper.properties
+ ./extras/AudioPluginHost/Builds/Android/gradlew
+ ./extras/AudioPluginHost/Builds/Android/gradlew.bat
+ ./extras/AudioPluginHost/Builds/Android/settings.gradle
+ ./extras/AudioPluginHost/Builds/LinuxMakefile/Makefile
+ ./extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj
+ ./extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/AudioPluginHost/Builds/MacOSX/Info-App.plist
+ ./extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost.sln
+ ./extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj
+ ./extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters
+ ./extras/AudioPluginHost/Builds/VisualStudio2015/resources.rc
+ ./extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost.sln
+ ./extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
+ ./extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
+ ./extras/AudioPluginHost/Builds/VisualStudio2017/resources.rc
+ ./extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost.sln
+ ./extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+ ./extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+ ./extras/AudioPluginHost/Builds/VisualStudio2019/resources.rc
+ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj
+ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost/Images.xcassets/AppIcon.appiconset/Contents.json
+ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost/Images.xcassets/LaunchImage.launchimage/Contents.json
+ ./extras/AudioPluginHost/Builds/iOS/Info-App.plist
+ ./extras/AudioPluginHost/Builds/iOS/LaunchScreen.storyboard
+ ./extras/AudioPluginHost/JuceLibraryCode/BinaryData.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/BinaryData.h
+ ./extras/AudioPluginHost/JuceLibraryCode/JuceHeader.h
+ ./extras/AudioPluginHost/JuceLibraryCode/ReadMe.txt
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_basics.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_basics.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_devices.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_devices.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_formats.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_formats.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_processors.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_processors.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_utils.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_utils.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_core.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_core.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_cryptography.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_cryptography.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_data_structures.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_data_structures.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_events.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_events.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_graphics.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_graphics.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_basics.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_extra.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_opengl.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_opengl.mm
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_video.cpp
+ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_video.mm
+ ./extras/BLOCKS/Makefile
+ ./extras/BLOCKS/standalone_sdk/README.md
+ ./extras/BLOCKS/standalone_sdk/SDK/BlocksHeader.h
+ ./extras/BLOCKS/standalone_sdk/SDK/Build/Linux/Makefile
+ ./extras/BLOCKS/standalone_sdk/SDK/Build/MacOS/BLOCKS-SDK.xcodeproj/project.pbxproj
+ ./extras/BLOCKS/standalone_sdk/SDK/Build/Windows/BLOCKS-SDK.sln
+ ./extras/BLOCKS/standalone_sdk/SDK/Build/Windows/BLOCKS-SDK.vcxproj
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Linux/Makefile
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/MacOS/BlockFinder.xcodeproj/project.pbxproj
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/MacOS/Makefile
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Windows/BlockFinder.sln
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Windows/BlockFinder.vcxproj
+ ./extras/BinaryBuilder/BinaryBuilder.jucer
+ ./extras/BinaryBuilder/Builds/LinuxMakefile/Makefile
+ ./extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
+ ./extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/BinaryBuilder/Builds/VisualStudio2019/BinaryBuilder.sln
+ ./extras/BinaryBuilder/Builds/VisualStudio2019/BinaryBuilder_ConsoleApp.vcxproj
+ ./extras/BinaryBuilder/Builds/VisualStudio2019/BinaryBuilder_ConsoleApp.vcxproj.filters
+ ./extras/BinaryBuilder/Builds/VisualStudio2019/resources.rc
+ ./extras/BinaryBuilder/JuceLibraryCode/JuceHeader.h
+ ./extras/BinaryBuilder/JuceLibraryCode/ReadMe.txt
+ ./extras/BinaryBuilder/JuceLibraryCode/include_juce_core.cpp
+ ./extras/BinaryBuilder/JuceLibraryCode/include_juce_core.mm
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/build.gradle
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/debug/res/values/string.xml
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/AndroidManifest.xml
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/SharingContentProvider.java
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/release/res/values/string.xml
+ ./extras/NetworkGraphicsDemo/Builds/Android/build.gradle
+ ./extras/NetworkGraphicsDemo/Builds/Android/gradle/wrapper/gradle-wrapper.properties
+ ./extras/NetworkGraphicsDemo/Builds/Android/gradlew
+ ./extras/NetworkGraphicsDemo/Builds/Android/gradlew.bat
+ ./extras/NetworkGraphicsDemo/Builds/Android/settings.gradle
+ ./extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile
+ ./extras/NetworkGraphicsDemo/Builds/MacOSX/Info-App.plist
+ ./extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj
+ ./extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/NetworkGraphicsDemo.sln
+ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/NetworkGraphicsDemo_App.vcxproj
+ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/NetworkGraphicsDemo_App.vcxproj.filters
+ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/resources.rc
+ ./extras/NetworkGraphicsDemo/Builds/iOS/Info-App.plist
+ ./extras/NetworkGraphicsDemo/Builds/iOS/LaunchScreen.storyboard
+ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj
+ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo/Images.xcassets/AppIcon.appiconset/Contents.json
+ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo/Images.xcassets/LaunchImage.launchimage/Contents.json
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.h
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/JuceHeader.h
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/ReadMe.txt
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_basics.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_basics.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_devices.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_devices.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_formats.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_formats.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_processors.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_processors.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_utils.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_utils.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_core.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_core.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_cryptography.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_cryptography.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_data_structures.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_data_structures.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_events.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_events.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_graphics.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_graphics.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_basics.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_extra.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_opengl.cpp
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_opengl.mm
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_osc.cpp
+ ./extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer
+ ./extras/NetworkGraphicsDemo/README.txt
+ ./extras/Projucer/Builds/LinuxMakefile/Makefile
+ ./extras/Projucer/Builds/MacOSX/Info-App.plist
+ ./extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
+ ./extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/Projucer/Builds/VisualStudio2015/Projucer.sln
+ ./extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj
+ ./extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters
+ ./extras/Projucer/Builds/VisualStudio2015/resources.rc
+ ./extras/Projucer/Builds/VisualStudio2017/Projucer.sln
+ ./extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
+ ./extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
+ ./extras/Projucer/Builds/VisualStudio2017/resources.rc
+ ./extras/Projucer/Builds/VisualStudio2019/Projucer.sln
+ ./extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+ ./extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+ ./extras/Projucer/Builds/VisualStudio2019/resources.rc
+ ./extras/Projucer/JuceLibraryCode/BinaryData.cpp
+ ./extras/Projucer/JuceLibraryCode/BinaryData.h
+ ./extras/Projucer/JuceLibraryCode/JuceHeader.h
+ ./extras/Projucer/JuceLibraryCode/ReadMe.txt
+ ./extras/Projucer/JuceLibraryCode/include_juce_analytics.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_core.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_core.mm
+ ./extras/Projucer/JuceLibraryCode/include_juce_cryptography.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_cryptography.mm
+ ./extras/Projucer/JuceLibraryCode/include_juce_data_structures.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_data_structures.mm
+ ./extras/Projucer/JuceLibraryCode/include_juce_events.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_events.mm
+ ./extras/Projucer/JuceLibraryCode/include_juce_graphics.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_graphics.mm
+ ./extras/Projucer/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_gui_basics.mm
+ ./extras/Projucer/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./extras/Projucer/JuceLibraryCode/include_juce_gui_extra.mm
+ ./extras/Projucer/Projucer.jucer
+ ./extras/Projucer/Source/BinaryData/Icons/background_logo.svg
+ ./extras/Projucer/Source/BinaryData/Icons/export_android.svg
+ ./extras/Projucer/Source/BinaryData/Icons/export_clion.svg
+ ./extras/Projucer/Source/BinaryData/Icons/export_codeBlocks.svg
+ ./extras/Projucer/Source/BinaryData/Icons/export_linux.svg
+ ./extras/Projucer/Source/BinaryData/Icons/export_visualStudio.svg
+ ./extras/Projucer/Source/BinaryData/Icons/export_xcode.svg
+ ./extras/Projucer/Source/BinaryData/Icons/huckleberry_icon.svg
+ ./extras/Projucer/Source/BinaryData/Icons/juce-logo-with-text.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_AnimatedApp.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_AudioApp.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_AudioPlugin.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_ConsoleApp.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_DLL.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_GUI.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_Highlight.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_OpenGL.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_Openfile.svg
+ ./extras/Projucer/Source/BinaryData/Icons/wizard_StaticLibrary.svg
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_InlineComponentTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewComponentTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewCppFileTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_PIPMain.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_PIPTemplate.h
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_UnityPluginGUIScript.cs
+ ./extras/Projucer/Source/BinaryData/colourscheme_dark.xml
+ ./extras/Projucer/Source/BinaryData/colourscheme_light.xml
+ ./extras/Projucer/Source/BinaryData/gradle/gradlew
+ ./extras/Projucer/Source/BinaryData/gradle/gradlew.bat
+ ./extras/Projucer/Source/BinaryData/nothingtoseehere.txt
+ ./extras/UnitTestRunner/Builds/LinuxMakefile/Makefile
+ ./extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj
+ ./extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
+ ./extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner.sln
+ ./extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
+ ./extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
+ ./extras/UnitTestRunner/Builds/VisualStudio2017/resources.rc
+ ./extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner.sln
+ ./extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+ ./extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+ ./extras/UnitTestRunner/Builds/VisualStudio2019/resources.rc
+ ./extras/UnitTestRunner/JuceLibraryCode/JuceHeader.h
+ ./extras/UnitTestRunner/JuceLibraryCode/ReadMe.txt
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_analytics.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_basics.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_basics.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_devices.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_devices.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_formats.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_formats.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_processors.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_processors.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_utils.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_utils.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_blocks_basics.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_core.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_core.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_cryptography.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_cryptography.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_data_structures.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_data_structures.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_dsp.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_dsp.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_events.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_events.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_graphics.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_graphics.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_basics.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_extra.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_opengl.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_opengl.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_osc.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_product_unlocking.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_product_unlocking.mm
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_video.cpp
+ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_video.mm
+ ./extras/UnitTestRunner/UnitTestRunner.jucer
+ ./extras/WindowsDLL/Builds/VisualStudio2019/WindowsDLL.sln
+ ./extras/WindowsDLL/Builds/VisualStudio2019/WindowsDLL_StaticLibrary.vcxproj
+ ./extras/WindowsDLL/Builds/VisualStudio2019/WindowsDLL_StaticLibrary.vcxproj.filters
+ ./extras/WindowsDLL/JuceLibraryCode/JuceHeader.h
+ ./extras/WindowsDLL/JuceLibraryCode/ReadMe.txt
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_basics.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_basics.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_devices.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_devices.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_formats.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_formats.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_processors.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_processors.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_utils.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_utils.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_core.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_core.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_cryptography.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_cryptography.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_data_structures.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_data_structures.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_events.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_events.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_graphics.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_graphics.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_basics.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_basics.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_extra.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_extra.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_opengl.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_opengl.mm
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_video.cpp
+ ./extras/WindowsDLL/JuceLibraryCode/include_juce_video.mm
+ ./extras/WindowsDLL/WindowsDLL.jucer
+ ./modules/JUCE Module Format.txt
+ ./modules/juce_audio_devices/native/java/app/com/roli/juce/JuceMidiSupport.java
+ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinExports.def
+ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r
+ ./modules/juce_audio_processors/format_types/VST3_SDK/README.md
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/README.md
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/typesizecheck.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidilearn.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstphysicalui.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstpluginterfacesupport.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/README.md
+ ./modules/juce_blocks_basics/README.txt
+ ./modules/juce_blocks_basics/juce_LittleFootFunctions.dox
+ ./modules/juce_blocks_basics/littlefoot/LittleFoot Language README.txt
+ ./modules/juce_blocks_basics/protocol/Protocol Format.txt
+ ./modules/juce_box2d/box2d/README.txt
+ ./modules/juce_core/native/java/README.txt
+ ./modules/juce_core/native/java/app/com/roli/juce/FragmentOverlay.java
+ ./modules/juce_core/native/java/app/com/roli/juce/JuceHTTPStream.java
+ ./modules/juce_core/native/javacore/app/com/roli/juce/JuceApp.java
+ ./modules/juce_core/native/javacore/init/com/roli/juce/Java.java
+ ./modules/juce_gui_basics/native/java/app/com/roli/juce/ComponentPeerView.java
+ ./modules/juce_gui_basics/native/javacore/app/com/roli/juce/JuceSharingContentProvider.java
+ ./modules/juce_gui_basics/native/javaopt/app/com/roli/juce/JuceActivity.java
+ ./modules/juce_gui_extra/native/java/app/com/roli/juce/JuceWebView.java
+ ./modules/juce_gui_extra/native/javaopt/app/com/roli/juce/JuceFirebaseInstanceIdService.java
+ ./modules/juce_gui_extra/native/javaopt/app/com/roli/juce/JuceFirebaseMessagingService.java
+ ./modules/juce_opengl/native/java/app/com/roli/juce/JuceOpenGLView.java
+ ./modules/juce_video/native/java/app/com/roli/juce/CameraCaptureSessionCaptureCallback.java
+ ./modules/juce_video/native/java/app/com/roli/juce/CameraCaptureSessionStateCallback.java
+ ./modules/juce_video/native/java/app/com/roli/juce/CameraDeviceStateCallback.java
+ ./modules/juce_video/native/java/app/com/roli/juce/JuceOrientationEventListener.java
+ ./modules/juce_video/native/java/app/com/roli/juce/MediaControllerCallback.java
+ ./modules/juce_video/native/java/app/com/roli/juce/MediaSessionCallback.java
+ ./modules/juce_video/native/java/app/com/roli/juce/SystemVolumeObserver.java
+Copyright: NONE
+License: UNKNOWN
+ FIXME
+
+Files: ./examples/Assets/AudioLiveScrollingDisplay.h
+ ./examples/Assets/DSPDemos_Common.h
+ ./examples/Assets/DemoUtilities.h
+ ./examples/Assets/WavefrontObjParser.h
+ ./examples/Audio/AudioAppDemo.h
+ ./examples/Audio/AudioLatencyDemo.h
+ ./examples/Audio/AudioPlaybackDemo.h
+ ./examples/Audio/AudioRecordingDemo.h
+ ./examples/Audio/AudioSettingsDemo.h
+ ./examples/Audio/AudioSynthesiserDemo.h
+ ./examples/Audio/MPEDemo.h
+ ./examples/Audio/MidiDemo.h
+ ./examples/Audio/PluckedStringsDemo.h
+ ./examples/Audio/SimpleFFTDemo.h
+ ./examples/BLOCKS/BlocksDrawingDemo.h
+ ./examples/BLOCKS/BlocksMonitorDemo.h
+ ./examples/BLOCKS/BlocksSynthDemo.h
+ ./examples/DSP/ConvolutionDemo.h
+ ./examples/DSP/FIRFilterDemo.h
+ ./examples/DSP/GainDemo.h
+ ./examples/DSP/IIRFilterDemo.h
+ ./examples/DSP/OscillatorDemo.h
+ ./examples/DSP/OverdriveDemo.h
+ ./examples/DSP/SIMDRegisterDemo.h
+ ./examples/DSP/StateVariableFilterDemo.h
+ ./examples/DSP/WaveShaperTanhDemo.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/AudioLiveScrollingDisplay.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/DSPDemos_Common.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/DemoUtilities.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/WavefrontObjParser.h
+ ./examples/GUI/AnimationAppDemo.h
+ ./examples/GUI/AnimationDemo.h
+ ./examples/GUI/BouncingBallWavetableDemo.h
+ ./examples/GUI/CameraDemo.h
+ ./examples/GUI/CodeEditorDemo.h
+ ./examples/GUI/ComponentDemo.h
+ ./examples/GUI/ComponentTransformsDemo.h
+ ./examples/GUI/DialogsDemo.h
+ ./examples/GUI/FlexBoxDemo.h
+ ./examples/GUI/FontsDemo.h
+ ./examples/GUI/GraphicsDemo.h
+ ./examples/GUI/GridDemo.h
+ ./examples/GUI/HelloWorldDemo.h
+ ./examples/GUI/ImagesDemo.h
+ ./examples/GUI/KeyMappingsDemo.h
+ ./examples/GUI/LookAndFeelDemo.h
+ ./examples/GUI/MDIDemo.h
+ ./examples/GUI/MenusDemo.h
+ ./examples/GUI/MultiTouchDemo.h
+ ./examples/GUI/OpenGLAppDemo.h
+ ./examples/GUI/OpenGLDemo.h
+ ./examples/GUI/OpenGLDemo2D.h
+ ./examples/GUI/PropertiesDemo.h
+ ./examples/GUI/VideoDemo.h
+ ./examples/GUI/WebBrowserDemo.h
+ ./examples/GUI/WidgetsDemo.h
+ ./examples/GUI/WindowsDemo.h
+ ./examples/Plugins/AUv3SynthPluginDemo.h
+ ./examples/Plugins/ArpeggiatorPluginDemo.h
+ ./examples/Plugins/AudioPluginDemo.h
+ ./examples/Plugins/DSPModulePluginDemo.h
+ ./examples/Plugins/GainPluginDemo.h
+ ./examples/Plugins/InterAppAudioEffectPluginDemo.h
+ ./examples/Plugins/MultiOutSynthPluginDemo.h
+ ./examples/Plugins/NoiseGatePluginDemo.h
+ ./examples/Plugins/SamplerPluginDemo.h
+ ./examples/Plugins/SurroundPluginDemo.h
+ ./examples/Utilities/AnalyticsCollectionDemo.h
+ ./examples/Utilities/Box2DDemo.h
+ ./examples/Utilities/ChildProcessDemo.h
+ ./examples/Utilities/CryptographyDemo.h
+ ./examples/Utilities/InAppPurchasesDemo.h
+ ./examples/Utilities/JavaScriptDemo.h
+ ./examples/Utilities/LiveConstantDemo.h
+ ./examples/Utilities/MultithreadingDemo.h
+ ./examples/Utilities/NetworkingDemo.h
+ ./examples/Utilities/OSCDemo.h
+ ./examples/Utilities/PushNotificationsDemo.h
+ ./examples/Utilities/SystemInfoDemo.h
+ ./examples/Utilities/TimersAndEventsDemo.h
+ ./examples/Utilities/UnitTestsDemo.h
+ ./examples/Utilities/ValueTreesDemo.h
+ ./examples/Utilities/XMLandJSONDemo.h
+ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/android/vending/billing/IInAppBillingService.java
+ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/AudioPerformanceTest.java
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/BlockFinder.cpp
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/BlockFinder.h
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Linux/main.cpp
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/MacOS/main.mm
+ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Windows/main.cpp
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/android/vending/billing/IInAppBillingService.java
+ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/JUCENetworkGraphicsDemo.java
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_ComponentTemplate.cpp
+ ./extras/Projucer/Source/BinaryData/Templates/jucer_ComponentTemplate.h
+ ./modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h
+ ./modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp
+ ./modules/juce_audio_basics/buffers/juce_AudioChannelSet.h
+ ./modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp
+ ./modules/juce_audio_basics/buffers/juce_AudioDataConverters.h
+ ./modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h
+ ./modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp
+ ./modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h
+ ./modules/juce_audio_basics/juce_audio_basics.cpp
+ ./modules/juce_audio_basics/juce_audio_basics.h
+ ./modules/juce_audio_basics/juce_audio_basics.mm
+ ./modules/juce_audio_basics/midi/juce_MidiBuffer.cpp
+ ./modules/juce_audio_basics/midi/juce_MidiBuffer.h
+ ./modules/juce_audio_basics/midi/juce_MidiFile.cpp
+ ./modules/juce_audio_basics/midi/juce_MidiFile.h
+ ./modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp
+ ./modules/juce_audio_basics/midi/juce_MidiKeyboardState.h
+ ./modules/juce_audio_basics/midi/juce_MidiMessage.cpp
+ ./modules/juce_audio_basics/midi/juce_MidiMessage.h
+ ./modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp
+ ./modules/juce_audio_basics/midi/juce_MidiMessageSequence.h
+ ./modules/juce_audio_basics/midi/juce_MidiRPN.cpp
+ ./modules/juce_audio_basics/midi/juce_MidiRPN.h
+ ./modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPEInstrument.h
+ ./modules/juce_audio_basics/mpe/juce_MPEMessages.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPEMessages.h
+ ./modules/juce_audio_basics/mpe/juce_MPENote.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPENote.h
+ ./modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPESynthesiser.h
+ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h
+ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h
+ ./modules/juce_audio_basics/mpe/juce_MPEUtils.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPEUtils.h
+ ./modules/juce_audio_basics/mpe/juce_MPEValue.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPEValue.h
+ ./modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp
+ ./modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h
+ ./modules/juce_audio_basics/native/juce_mac_CoreAudioLayouts.h
+ ./modules/juce_audio_basics/sources/juce_AudioSource.h
+ ./modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_BufferingAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_MemoryAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_MemoryAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_MixerAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_PositionableAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_ReverbAudioSource.h
+ ./modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp
+ ./modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h
+ ./modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp
+ ./modules/juce_audio_basics/synthesisers/juce_Synthesiser.h
+ ./modules/juce_audio_basics/utilities/juce_ADSR.h
+ ./modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp
+ ./modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h
+ ./modules/juce_audio_basics/utilities/juce_Decibels.h
+ ./modules/juce_audio_basics/utilities/juce_IIRFilter.cpp
+ ./modules/juce_audio_basics/utilities/juce_IIRFilter.h
+ ./modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp
+ ./modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h
+ ./modules/juce_audio_basics/utilities/juce_Reverb.h
+ ./modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp
+ ./modules/juce_audio_basics/utilities/juce_SmoothedValue.h
+ ./modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
+ ./modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h
+ ./modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp
+ ./modules/juce_audio_devices/audio_io/juce_AudioIODevice.h
+ ./modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp
+ ./modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h
+ ./modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h
+ ./modules/juce_audio_devices/juce_audio_devices.cpp
+ ./modules/juce_audio_devices/juce_audio_devices.h
+ ./modules/juce_audio_devices/juce_audio_devices.mm
+ ./modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp
+ ./modules/juce_audio_devices/midi_io/juce_MidiDevices.h
+ ./modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp
+ ./modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h
+ ./modules/juce_audio_devices/native/juce_MidiDataConcatenator.h
+ ./modules/juce_audio_devices/native/juce_android_Audio.cpp
+ ./modules/juce_audio_devices/native/juce_android_Midi.cpp
+ ./modules/juce_audio_devices/native/juce_android_Oboe.cpp
+ ./modules/juce_audio_devices/native/juce_android_OpenSL.cpp
+ ./modules/juce_audio_devices/native/juce_ios_Audio.cpp
+ ./modules/juce_audio_devices/native/juce_ios_Audio.h
+ ./modules/juce_audio_devices/native/juce_linux_ALSA.cpp
+ ./modules/juce_audio_devices/native/juce_linux_Bela.cpp
+ ./modules/juce_audio_devices/native/juce_linux_JackAudio.cpp
+ ./modules/juce_audio_devices/native/juce_linux_Midi.cpp
+ ./modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp
+ ./modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp
+ ./modules/juce_audio_devices/native/juce_win32_ASIO.cpp
+ ./modules/juce_audio_devices/native/juce_win32_DirectSound.cpp
+ ./modules/juce_audio_devices/native/juce_win32_Midi.cpp
+ ./modules/juce_audio_devices/native/juce_win32_WASAPI.cpp
+ ./modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp
+ ./modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h
+ ./modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp
+ ./modules/juce_audio_devices/sources/juce_AudioTransportSource.h
+ ./modules/juce_blocks_basics/blocks/juce_Block.cpp
+ ./modules/juce_blocks_basics/blocks/juce_Block.h
+ ./modules/juce_blocks_basics/blocks/juce_BlocksVersion.cpp
+ ./modules/juce_blocks_basics/blocks/juce_BlocksVersion.h
+ ./modules/juce_blocks_basics/blocks/juce_ControlButton.h
+ ./modules/juce_blocks_basics/blocks/juce_LEDGrid.h
+ ./modules/juce_blocks_basics/blocks/juce_LEDRow.h
+ ./modules/juce_blocks_basics/blocks/juce_StatusLight.h
+ ./modules/juce_blocks_basics/blocks/juce_TouchList.h
+ ./modules/juce_blocks_basics/blocks/juce_TouchSurface.h
+ ./modules/juce_blocks_basics/juce_blocks_basics.cpp
+ ./modules/juce_blocks_basics/juce_blocks_basics.h
+ ./modules/juce_blocks_basics/littlefoot/juce_LittleFootCompiler.h
+ ./modules/juce_blocks_basics/littlefoot/juce_LittleFootRemoteHeap.h
+ ./modules/juce_blocks_basics/littlefoot/juce_LittleFootRunner.h
+ ./modules/juce_blocks_basics/protocol/juce_BitPackingUtilities.h
+ ./modules/juce_blocks_basics/protocol/juce_BlockModels.h
+ ./modules/juce_blocks_basics/protocol/juce_BlocksProtocolDefinitions.h
+ ./modules/juce_blocks_basics/protocol/juce_HostPacketBuilder.h
+ ./modules/juce_blocks_basics/protocol/juce_HostPacketDecoder.h
+ ./modules/juce_blocks_basics/topology/internal/juce_BandwidthStatsLogger.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_BlockImplementation.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_ConnectedDeviceGroup.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_DepreciatedVersionReader.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_Detector.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_DetectorHolder.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_DeviceInfo.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_MIDIDeviceDetector.cpp
+ ./modules/juce_blocks_basics/topology/internal/juce_MidiDeviceConnection.cpp
+ ./modules/juce_blocks_basics/topology/juce_BlockGraph.cpp
+ ./modules/juce_blocks_basics/topology/juce_BlockGraph.h
+ ./modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp
+ ./modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.h
+ ./modules/juce_blocks_basics/topology/juce_RuleBasedTopologySource.cpp
+ ./modules/juce_blocks_basics/topology/juce_RuleBasedTopologySource.h
+ ./modules/juce_blocks_basics/topology/juce_Topology.h
+ ./modules/juce_blocks_basics/topology/juce_TopologySource.h
+ ./modules/juce_blocks_basics/visualisers/juce_BitmapLEDProgram.cpp
+ ./modules/juce_blocks_basics/visualisers/juce_BitmapLEDProgram.h
+ ./modules/juce_blocks_basics/visualisers/juce_DrumPadLEDProgram.cpp
+ ./modules/juce_blocks_basics/visualisers/juce_DrumPadLEDProgram.h
+ ./modules/juce_core/containers/juce_AbstractFifo.cpp
+ ./modules/juce_core/containers/juce_AbstractFifo.h
+ ./modules/juce_core/containers/juce_Array.h
+ ./modules/juce_core/containers/juce_ArrayAllocationBase.h
+ ./modules/juce_core/containers/juce_ArrayBase.cpp
+ ./modules/juce_core/containers/juce_ArrayBase.h
+ ./modules/juce_core/containers/juce_DynamicObject.cpp
+ ./modules/juce_core/containers/juce_DynamicObject.h
+ ./modules/juce_core/containers/juce_ElementComparator.h
+ ./modules/juce_core/containers/juce_HashMap.h
+ ./modules/juce_core/containers/juce_HashMap_test.cpp
+ ./modules/juce_core/containers/juce_LinkedListPointer.h
+ ./modules/juce_core/containers/juce_ListenerList.h
+ ./modules/juce_core/containers/juce_NamedValueSet.cpp
+ ./modules/juce_core/containers/juce_NamedValueSet.h
+ ./modules/juce_core/containers/juce_OwnedArray.cpp
+ ./modules/juce_core/containers/juce_OwnedArray.h
+ ./modules/juce_core/containers/juce_PropertySet.cpp
+ ./modules/juce_core/containers/juce_PropertySet.h
+ ./modules/juce_core/containers/juce_ReferenceCountedArray.cpp
+ ./modules/juce_core/containers/juce_ReferenceCountedArray.h
+ ./modules/juce_core/containers/juce_ScopedValueSetter.h
+ ./modules/juce_core/containers/juce_SortedSet.h
+ ./modules/juce_core/containers/juce_SparseSet.cpp
+ ./modules/juce_core/containers/juce_SparseSet.h
+ ./modules/juce_core/containers/juce_Variant.cpp
+ ./modules/juce_core/containers/juce_Variant.h
+ ./modules/juce_core/files/juce_DirectoryIterator.cpp
+ ./modules/juce_core/files/juce_DirectoryIterator.h
+ ./modules/juce_core/files/juce_File.cpp
+ ./modules/juce_core/files/juce_File.h
+ ./modules/juce_core/files/juce_FileFilter.cpp
+ ./modules/juce_core/files/juce_FileFilter.h
+ ./modules/juce_core/files/juce_FileInputStream.cpp
+ ./modules/juce_core/files/juce_FileInputStream.h
+ ./modules/juce_core/files/juce_FileOutputStream.cpp
+ ./modules/juce_core/files/juce_FileOutputStream.h
+ ./modules/juce_core/files/juce_FileSearchPath.cpp
+ ./modules/juce_core/files/juce_FileSearchPath.h
+ ./modules/juce_core/files/juce_MemoryMappedFile.h
+ ./modules/juce_core/files/juce_TemporaryFile.cpp
+ ./modules/juce_core/files/juce_TemporaryFile.h
+ ./modules/juce_core/files/juce_WildcardFileFilter.cpp
+ ./modules/juce_core/files/juce_WildcardFileFilter.h
+ ./modules/juce_core/javascript/juce_JSON.cpp
+ ./modules/juce_core/javascript/juce_JSON.h
+ ./modules/juce_core/javascript/juce_Javascript.cpp
+ ./modules/juce_core/javascript/juce_Javascript.h
+ ./modules/juce_core/juce_core.cpp
+ ./modules/juce_core/juce_core.h
+ ./modules/juce_core/juce_core.mm
+ ./modules/juce_core/logging/juce_FileLogger.cpp
+ ./modules/juce_core/logging/juce_FileLogger.h
+ ./modules/juce_core/logging/juce_Logger.cpp
+ ./modules/juce_core/logging/juce_Logger.h
+ ./modules/juce_core/maths/juce_BigInteger.cpp
+ ./modules/juce_core/maths/juce_BigInteger.h
+ ./modules/juce_core/maths/juce_Expression.cpp
+ ./modules/juce_core/maths/juce_Expression.h
+ ./modules/juce_core/maths/juce_MathsFunctions.h
+ ./modules/juce_core/maths/juce_NormalisableRange.h
+ ./modules/juce_core/maths/juce_Random.cpp
+ ./modules/juce_core/maths/juce_Random.h
+ ./modules/juce_core/maths/juce_Range.h
+ ./modules/juce_core/maths/juce_StatisticsAccumulator.h
+ ./modules/juce_core/memory/juce_Atomic.h
+ ./modules/juce_core/memory/juce_ByteOrder.h
+ ./modules/juce_core/memory/juce_ContainerDeletePolicy.h
+ ./modules/juce_core/memory/juce_HeapBlock.h
+ ./modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h
+ ./modules/juce_core/memory/juce_LeakedObjectDetector.h
+ ./modules/juce_core/memory/juce_Memory.h
+ ./modules/juce_core/memory/juce_MemoryBlock.cpp
+ ./modules/juce_core/memory/juce_MemoryBlock.h
+ ./modules/juce_core/memory/juce_OptionalScopedPointer.h
+ ./modules/juce_core/memory/juce_ReferenceCountedObject.h
+ ./modules/juce_core/memory/juce_ScopedPointer.h
+ ./modules/juce_core/memory/juce_SharedResourcePointer.h
+ ./modules/juce_core/memory/juce_Singleton.h
+ ./modules/juce_core/memory/juce_WeakReference.h
+ ./modules/juce_core/misc/juce_ConsoleApplication.cpp
+ ./modules/juce_core/misc/juce_ConsoleApplication.h
+ ./modules/juce_core/misc/juce_Result.cpp
+ ./modules/juce_core/misc/juce_Result.h
+ ./modules/juce_core/misc/juce_RuntimePermissions.cpp
+ ./modules/juce_core/misc/juce_RuntimePermissions.h
+ ./modules/juce_core/misc/juce_Uuid.cpp
+ ./modules/juce_core/misc/juce_Uuid.h
+ ./modules/juce_core/misc/juce_WindowsRegistry.h
+ ./modules/juce_core/native/juce_BasicNativeHeaders.h
+ ./modules/juce_core/native/juce_android_Files.cpp
+ ./modules/juce_core/native/juce_android_JNIHelpers.cpp
+ ./modules/juce_core/native/juce_android_JNIHelpers.h
+ ./modules/juce_core/native/juce_android_Misc.cpp
+ ./modules/juce_core/native/juce_android_Network.cpp
+ ./modules/juce_core/native/juce_android_RuntimePermissions.cpp
+ ./modules/juce_core/native/juce_android_SystemStats.cpp
+ ./modules/juce_core/native/juce_android_Threads.cpp
+ ./modules/juce_core/native/juce_curl_Network.cpp
+ ./modules/juce_core/native/juce_linux_CommonFile.cpp
+ ./modules/juce_core/native/juce_linux_Files.cpp
+ ./modules/juce_core/native/juce_linux_Network.cpp
+ ./modules/juce_core/native/juce_linux_SystemStats.cpp
+ ./modules/juce_core/native/juce_linux_Threads.cpp
+ ./modules/juce_core/native/juce_mac_ClangBugWorkaround.h
+ ./modules/juce_core/native/juce_mac_Files.mm
+ ./modules/juce_core/native/juce_mac_Network.mm
+ ./modules/juce_core/native/juce_mac_Strings.mm
+ ./modules/juce_core/native/juce_mac_SystemStats.mm
+ ./modules/juce_core/native/juce_mac_Threads.mm
+ ./modules/juce_core/native/juce_osx_ObjCHelpers.h
+ ./modules/juce_core/native/juce_posix_IPAddress.h
+ ./modules/juce_core/native/juce_posix_NamedPipe.cpp
+ ./modules/juce_core/native/juce_posix_SharedCode.h
+ ./modules/juce_core/native/juce_win32_ComSmartPtr.h
+ ./modules/juce_core/native/juce_win32_Files.cpp
+ ./modules/juce_core/native/juce_win32_Network.cpp
+ ./modules/juce_core/native/juce_win32_Registry.cpp
+ ./modules/juce_core/native/juce_win32_SystemStats.cpp
+ ./modules/juce_core/native/juce_win32_Threads.cpp
+ ./modules/juce_core/network/juce_IPAddress.cpp
+ ./modules/juce_core/network/juce_IPAddress.h
+ ./modules/juce_core/network/juce_MACAddress.cpp
+ ./modules/juce_core/network/juce_MACAddress.h
+ ./modules/juce_core/network/juce_NamedPipe.cpp
+ ./modules/juce_core/network/juce_NamedPipe.h
+ ./modules/juce_core/network/juce_Socket.cpp
+ ./modules/juce_core/network/juce_Socket.h
+ ./modules/juce_core/network/juce_URL.cpp
+ ./modules/juce_core/network/juce_URL.h
+ ./modules/juce_core/network/juce_WebInputStream.cpp
+ ./modules/juce_core/network/juce_WebInputStream.h
+ ./modules/juce_core/streams/juce_BufferedInputStream.cpp
+ ./modules/juce_core/streams/juce_BufferedInputStream.h
+ ./modules/juce_core/streams/juce_FileInputSource.cpp
+ ./modules/juce_core/streams/juce_FileInputSource.h
+ ./modules/juce_core/streams/juce_InputSource.h
+ ./modules/juce_core/streams/juce_InputStream.cpp
+ ./modules/juce_core/streams/juce_InputStream.h
+ ./modules/juce_core/streams/juce_MemoryInputStream.cpp
+ ./modules/juce_core/streams/juce_MemoryInputStream.h
+ ./modules/juce_core/streams/juce_MemoryOutputStream.cpp
+ ./modules/juce_core/streams/juce_MemoryOutputStream.h
+ ./modules/juce_core/streams/juce_OutputStream.cpp
+ ./modules/juce_core/streams/juce_OutputStream.h
+ ./modules/juce_core/streams/juce_SubregionStream.cpp
+ ./modules/juce_core/streams/juce_SubregionStream.h
+ ./modules/juce_core/streams/juce_URLInputSource.cpp
+ ./modules/juce_core/streams/juce_URLInputSource.h
+ ./modules/juce_core/system/juce_CompilerSupport.h
+ ./modules/juce_core/system/juce_PlatformDefs.h
+ ./modules/juce_core/system/juce_StandardHeader.h
+ ./modules/juce_core/system/juce_SystemStats.cpp
+ ./modules/juce_core/system/juce_SystemStats.h
+ ./modules/juce_core/system/juce_TargetPlatform.h
+ ./modules/juce_core/text/juce_Base64.cpp
+ ./modules/juce_core/text/juce_Base64.h
+ ./modules/juce_core/text/juce_CharPointer_ASCII.h
+ ./modules/juce_core/text/juce_CharPointer_UTF16.h
+ ./modules/juce_core/text/juce_CharPointer_UTF32.h
+ ./modules/juce_core/text/juce_CharPointer_UTF8.h
+ ./modules/juce_core/text/juce_CharacterFunctions.cpp
+ ./modules/juce_core/text/juce_CharacterFunctions.h
+ ./modules/juce_core/text/juce_Identifier.cpp
+ ./modules/juce_core/text/juce_Identifier.h
+ ./modules/juce_core/text/juce_LocalisedStrings.cpp
+ ./modules/juce_core/text/juce_LocalisedStrings.h
+ ./modules/juce_core/text/juce_NewLine.h
+ ./modules/juce_core/text/juce_String.cpp
+ ./modules/juce_core/text/juce_String.h
+ ./modules/juce_core/text/juce_StringArray.cpp
+ ./modules/juce_core/text/juce_StringArray.h
+ ./modules/juce_core/text/juce_StringPairArray.cpp
+ ./modules/juce_core/text/juce_StringPairArray.h
+ ./modules/juce_core/text/juce_StringPool.cpp
+ ./modules/juce_core/text/juce_StringPool.h
+ ./modules/juce_core/text/juce_StringRef.h
+ ./modules/juce_core/text/juce_TextDiff.cpp
+ ./modules/juce_core/text/juce_TextDiff.h
+ ./modules/juce_core/threads/juce_ChildProcess.cpp
+ ./modules/juce_core/threads/juce_ChildProcess.h
+ ./modules/juce_core/threads/juce_CriticalSection.h
+ ./modules/juce_core/threads/juce_DynamicLibrary.h
+ ./modules/juce_core/threads/juce_HighResolutionTimer.cpp
+ ./modules/juce_core/threads/juce_HighResolutionTimer.h
+ ./modules/juce_core/threads/juce_InterProcessLock.h
+ ./modules/juce_core/threads/juce_Process.h
+ ./modules/juce_core/threads/juce_ReadWriteLock.cpp
+ ./modules/juce_core/threads/juce_ReadWriteLock.h
+ ./modules/juce_core/threads/juce_ScopedLock.h
+ ./modules/juce_core/threads/juce_ScopedReadLock.h
+ ./modules/juce_core/threads/juce_ScopedWriteLock.h
+ ./modules/juce_core/threads/juce_SpinLock.h
+ ./modules/juce_core/threads/juce_Thread.cpp
+ ./modules/juce_core/threads/juce_Thread.h
+ ./modules/juce_core/threads/juce_ThreadLocalValue.h
+ ./modules/juce_core/threads/juce_ThreadPool.cpp
+ ./modules/juce_core/threads/juce_ThreadPool.h
+ ./modules/juce_core/threads/juce_TimeSliceThread.cpp
+ ./modules/juce_core/threads/juce_TimeSliceThread.h
+ ./modules/juce_core/threads/juce_WaitableEvent.h
+ ./modules/juce_core/time/juce_PerformanceCounter.cpp
+ ./modules/juce_core/time/juce_PerformanceCounter.h
+ ./modules/juce_core/time/juce_RelativeTime.cpp
+ ./modules/juce_core/time/juce_RelativeTime.h
+ ./modules/juce_core/time/juce_Time.cpp
+ ./modules/juce_core/time/juce_Time.h
+ ./modules/juce_core/unit_tests/juce_UnitTest.cpp
+ ./modules/juce_core/unit_tests/juce_UnitTest.h
+ ./modules/juce_core/unit_tests/juce_UnitTestCategories.h
+ ./modules/juce_core/xml/juce_XmlDocument.cpp
+ ./modules/juce_core/xml/juce_XmlDocument.h
+ ./modules/juce_core/xml/juce_XmlElement.cpp
+ ./modules/juce_core/xml/juce_XmlElement.h
+ ./modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp
+ ./modules/juce_core/zip/juce_GZIPCompressorOutputStream.h
+ ./modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp
+ ./modules/juce_core/zip/juce_GZIPDecompressorInputStream.h
+ ./modules/juce_core/zip/juce_ZipFile.cpp
+ ./modules/juce_core/zip/juce_ZipFile.h
+ ./modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp
+ ./modules/juce_events/broadcasters/juce_ActionBroadcaster.h
+ ./modules/juce_events/broadcasters/juce_ActionListener.h
+ ./modules/juce_events/broadcasters/juce_AsyncUpdater.cpp
+ ./modules/juce_events/broadcasters/juce_AsyncUpdater.h
+ ./modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp
+ ./modules/juce_events/broadcasters/juce_ChangeBroadcaster.h
+ ./modules/juce_events/broadcasters/juce_ChangeListener.h
+ ./modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp
+ ./modules/juce_events/interprocess/juce_ConnectedChildProcess.h
+ ./modules/juce_events/interprocess/juce_InterprocessConnection.cpp
+ ./modules/juce_events/interprocess/juce_InterprocessConnection.h
+ ./modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp
+ ./modules/juce_events/interprocess/juce_InterprocessConnectionServer.h
+ ./modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp
+ ./modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h
+ ./modules/juce_events/juce_events.cpp
+ ./modules/juce_events/juce_events.h
+ ./modules/juce_events/juce_events.mm
+ ./modules/juce_events/messages/juce_ApplicationBase.cpp
+ ./modules/juce_events/messages/juce_ApplicationBase.h
+ ./modules/juce_events/messages/juce_CallbackMessage.h
+ ./modules/juce_events/messages/juce_DeletedAtShutdown.cpp
+ ./modules/juce_events/messages/juce_DeletedAtShutdown.h
+ ./modules/juce_events/messages/juce_Initialisation.h
+ ./modules/juce_events/messages/juce_Message.h
+ ./modules/juce_events/messages/juce_MessageListener.cpp
+ ./modules/juce_events/messages/juce_MessageListener.h
+ ./modules/juce_events/messages/juce_MessageManager.cpp
+ ./modules/juce_events/messages/juce_MessageManager.h
+ ./modules/juce_events/messages/juce_MountedVolumeListChangeDetector.h
+ ./modules/juce_events/messages/juce_NotificationType.h
+ ./modules/juce_events/native/juce_android_Messaging.cpp
+ ./modules/juce_events/native/juce_ios_MessageManager.mm
+ ./modules/juce_events/native/juce_linux_EventLoop.h
+ ./modules/juce_events/native/juce_linux_Messaging.cpp
+ ./modules/juce_events/native/juce_mac_MessageManager.mm
+ ./modules/juce_events/native/juce_osx_MessageQueue.h
+ ./modules/juce_events/native/juce_win32_HiddenMessageWindow.h
+ ./modules/juce_events/native/juce_win32_Messaging.cpp
+ ./modules/juce_events/native/juce_win32_WinRTWrapper.cpp
+ ./modules/juce_events/native/juce_win32_WinRTWrapper.h
+ ./modules/juce_events/timers/juce_MultiTimer.cpp
+ ./modules/juce_events/timers/juce_MultiTimer.h
+ ./modules/juce_events/timers/juce_Timer.cpp
+ ./modules/juce_events/timers/juce_Timer.h
+ ./modules/juce_product_unlocking/juce_product_unlocking.mm
+ ./modules/juce_video/native/juce_android_Video.h
+ ./modules/juce_video/native/juce_mac_Video.h
+Copyright: 2017, - ROLI Ltd.
+ 2018, - ROLI Ltd.
+ 2019, - ROLI Ltd.
+License: UNKNOWN
+ FIXME
+
+Files: ./examples/Assets/Box2DTests/ApplyForce.h
+ ./examples/Assets/Box2DTests/BodyTypes.h
+ ./examples/Assets/Box2DTests/Breakable.h
+ ./examples/Assets/Box2DTests/Bridge.h
+ ./examples/Assets/Box2DTests/BulletTest.h
+ ./examples/Assets/Box2DTests/Cantilever.h
+ ./examples/Assets/Box2DTests/Car.h
+ ./examples/Assets/Box2DTests/Chain.h
+ ./examples/Assets/Box2DTests/CharacterCollision.h
+ ./examples/Assets/Box2DTests/CollisionFiltering.h
+ ./examples/Assets/Box2DTests/CollisionProcessing.h
+ ./examples/Assets/Box2DTests/CompoundShapes.h
+ ./examples/Assets/Box2DTests/Confined.h
+ ./examples/Assets/Box2DTests/ContinuousTest.h
+ ./examples/Assets/Box2DTests/DistanceTest.h
+ ./examples/Assets/Box2DTests/Dominos.h
+ ./examples/Assets/Box2DTests/DumpShell.h
+ ./examples/Assets/Box2DTests/DynamicTreeTest.h
+ ./examples/Assets/Box2DTests/EdgeShapes.h
+ ./examples/Assets/Box2DTests/EdgeTest.h
+ ./examples/Assets/Box2DTests/Gears.h
+ ./examples/Assets/Box2DTests/OneSidedPlatform.h
+ ./examples/Assets/Box2DTests/Pinball.h
+ ./examples/Assets/Box2DTests/PolyCollision.h
+ ./examples/Assets/Box2DTests/PolyShapes.h
+ ./examples/Assets/Box2DTests/Prismatic.h
+ ./examples/Assets/Box2DTests/Pulleys.h
+ ./examples/Assets/Box2DTests/Pyramid.h
+ ./examples/Assets/Box2DTests/RayCast.h
+ ./examples/Assets/Box2DTests/Revolute.h
+ ./examples/Assets/Box2DTests/RopeJoint.h
+ ./examples/Assets/Box2DTests/SensorTest.h
+ ./examples/Assets/Box2DTests/ShapeEditing.h
+ ./examples/Assets/Box2DTests/SliderCrank.h
+ ./examples/Assets/Box2DTests/SphereStack.h
+ ./examples/Assets/Box2DTests/TestEntries.cpp
+ ./examples/Assets/Box2DTests/TheoJansen.h
+ ./examples/Assets/Box2DTests/Tiles.h
+ ./examples/Assets/Box2DTests/TimeOfImpact.h
+ ./examples/Assets/Box2DTests/Tumbler.h
+ ./examples/Assets/Box2DTests/VaryingFriction.h
+ ./examples/Assets/Box2DTests/VaryingRestitution.h
+ ./examples/Assets/Box2DTests/VerticalStack.h
+ ./examples/Assets/Box2DTests/Web.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/ApplyForce.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/BodyTypes.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Breakable.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Bridge.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/BulletTest.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Cantilever.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Car.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Chain.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CharacterCollision.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CollisionFiltering.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CollisionProcessing.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CompoundShapes.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Confined.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/ContinuousTest.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/DistanceTest.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Dominos.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/DumpShell.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/DynamicTreeTest.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/EdgeShapes.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/EdgeTest.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Gears.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/OneSidedPlatform.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Pinball.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/PolyCollision.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/PolyShapes.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Prismatic.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Pulleys.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Pyramid.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/RayCast.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Revolute.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/RopeJoint.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/SensorTest.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/ShapeEditing.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/SliderCrank.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/SphereStack.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/TestEntries.cpp
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/TheoJansen.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Tiles.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/TimeOfImpact.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Tumbler.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/VaryingFriction.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/VaryingRestitution.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/VerticalStack.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Web.h
+ ./modules/juce_box2d/box2d/Box2D.h
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2ChainShape.cpp
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2ChainShape.h
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2CircleShape.cpp
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2CircleShape.h
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2EdgeShape.cpp
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2EdgeShape.h
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2PolygonShape.cpp
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2PolygonShape.h
+ ./modules/juce_box2d/box2d/Collision/Shapes/b2Shape.h
+ ./modules/juce_box2d/box2d/Collision/b2BroadPhase.cpp
+ ./modules/juce_box2d/box2d/Collision/b2BroadPhase.h
+ ./modules/juce_box2d/box2d/Collision/b2CollideCircle.cpp
+ ./modules/juce_box2d/box2d/Collision/b2CollideEdge.cpp
+ ./modules/juce_box2d/box2d/Collision/b2CollidePolygon.cpp
+ ./modules/juce_box2d/box2d/Collision/b2Collision.cpp
+ ./modules/juce_box2d/box2d/Collision/b2Collision.h
+ ./modules/juce_box2d/box2d/Collision/b2Distance.cpp
+ ./modules/juce_box2d/box2d/Collision/b2Distance.h
+ ./modules/juce_box2d/box2d/Collision/b2DynamicTree.cpp
+ ./modules/juce_box2d/box2d/Collision/b2DynamicTree.h
+ ./modules/juce_box2d/box2d/Collision/b2TimeOfImpact.cpp
+ ./modules/juce_box2d/box2d/Collision/b2TimeOfImpact.h
+ ./modules/juce_box2d/box2d/Common/b2BlockAllocator.cpp
+ ./modules/juce_box2d/box2d/Common/b2BlockAllocator.h
+ ./modules/juce_box2d/box2d/Common/b2GrowableStack.h
+ ./modules/juce_box2d/box2d/Common/b2Math.cpp
+ ./modules/juce_box2d/box2d/Common/b2Math.h
+ ./modules/juce_box2d/box2d/Common/b2Settings.cpp
+ ./modules/juce_box2d/box2d/Common/b2Settings.h
+ ./modules/juce_box2d/box2d/Common/b2StackAllocator.cpp
+ ./modules/juce_box2d/box2d/Common/b2StackAllocator.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndCircleContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndCircleContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndPolygonContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndPolygonContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2CircleContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2CircleContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ContactSolver.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ContactSolver.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndCircleContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndCircleContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndPolygonContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonAndCircleContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonAndCircleContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonContact.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonContact.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2DistanceJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2DistanceJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2FrictionJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2FrictionJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2GearJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2GearJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2Joint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2Joint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2MouseJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2MouseJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PrismaticJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PrismaticJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PulleyJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PulleyJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RevoluteJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RevoluteJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RopeJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RopeJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WeldJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WeldJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WheelJoint.cpp
+ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WheelJoint.h
+ ./modules/juce_box2d/box2d/Dynamics/b2Body.cpp
+ ./modules/juce_box2d/box2d/Dynamics/b2Body.h
+ ./modules/juce_box2d/box2d/Dynamics/b2ContactManager.cpp
+ ./modules/juce_box2d/box2d/Dynamics/b2ContactManager.h
+ ./modules/juce_box2d/box2d/Dynamics/b2Fixture.cpp
+ ./modules/juce_box2d/box2d/Dynamics/b2Fixture.h
+ ./modules/juce_box2d/box2d/Dynamics/b2Island.cpp
+ ./modules/juce_box2d/box2d/Dynamics/b2Island.h
+ ./modules/juce_box2d/box2d/Dynamics/b2TimeStep.h
+ ./modules/juce_box2d/box2d/Dynamics/b2World.cpp
+ ./modules/juce_box2d/box2d/Dynamics/b2World.h
+ ./modules/juce_box2d/box2d/Dynamics/b2WorldCallbacks.cpp
+ ./modules/juce_box2d/box2d/Dynamics/b2WorldCallbacks.h
+ ./modules/juce_box2d/box2d/Rope/b2Rope.h
+Copyright: 2006-2007, Erin Catto http:www.box2d.org
+ 2006-2009, Erin Catto http:www.box2d.org
+ 2006-2010, Erin Catto http:www.box2d.org
+ 2006-2011, Erin Catto http:www.box2d.org
+ 2007, Erin Catto http:www.box2d.org
+ 2007-2009, Erin Catto http:www.box2d.org
+ 2007-2011, Erin Catto http:www.box2d.org
+ 2008-2009, Erin Catto http:www.box2d.org
+ 2009, Erin Catto http:www.box2d.org
+ 2010, Erin Catto http:www.box2d.org
+ 2011, Erin Catto http:www.box2d.org
+License: Zlib
+ FIXME
+
+Files: ./modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsttestplugprovider.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp
+ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h
+Copyright: 2018, Steinberg Media Technologies GmbH
+ 2019, Steinberg Media Technologies GmbH
+License: BSD-3-clause
+ FIXME
+
+Files: ./LICENSE.md
+ ./examples/DemoRunner/JuceLibraryCode/AppConfig.h
+ ./extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h
+ ./extras/AudioPluginHost/JuceLibraryCode/AppConfig.h
+ ./extras/BinaryBuilder/JuceLibraryCode/AppConfig.h
+ ./extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h
+ ./extras/Projucer/JuceLibraryCode/AppConfig.h
+ ./extras/UnitTestRunner/JuceLibraryCode/AppConfig.h
+ ./extras/WindowsDLL/JuceLibraryCode/AppConfig.h
+Copyright: NONE
+License: GPL-3
+ FIXME
+
+Files: ./examples/Assets/Box2DTests/Rope.h
+ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Rope.h
+ ./modules/juce_box2d/box2d/Common/b2Draw.cpp
+ ./modules/juce_box2d/box2d/Common/b2Draw.h
+ ./modules/juce_box2d/box2d/Common/b2Timer.cpp
+ ./modules/juce_box2d/box2d/Common/b2Timer.h
+ ./modules/juce_box2d/box2d/Rope/b2Rope.cpp
+Copyright: 2011, Erin Catto http:box2d.org
+License: Zlib
+ FIXME
+
+Files: ./examples/DemoRunner/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt
+ ./extras/AudioPerformanceTest/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt
+ ./extras/AudioPluginHost/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt
+ ./extras/NetworkGraphicsDemo/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt
+ ./extras/Projucer/Source/BinaryData/gradle/LICENSE
+Copyright: NONE
+License: Apache-2.0
+ FIXME
+
+Files: ./modules/juce_blocks_basics/blocks/juce_BlockConfigManager.h
+ ./modules/juce_core/misc/juce_StdFunctionCompat.cpp
+ ./modules/juce_core/misc/juce_StdFunctionCompat.h
+Copyright: 2017, - ROLI Ltd.
+License: ISC
+ FIXME
+
+Files: ./examples/DemoRunner/Builds/VisualStudio2015/resources.rc
+ ./examples/DemoRunner/Builds/VisualStudio2017/resources.rc
+ ./examples/DemoRunner/Builds/VisualStudio2019/resources.rc
+Copyright: 2018, - ROLI Ltd.0"
+License: UNKNOWN
+ FIXME
+
+Files: ./modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt
+ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt
+Copyright: 2019, Steinberg Media Technologies GmbH
+License: GPL-3
+ FIXME
+
+Files: ./examples/DemoRunner/Builds/MacOSX/Info-App.plist
+ ./examples/DemoRunner/Builds/iOS/Info-App.plist
+Copyright: 2018, - ROLI Ltd.</string>
+License: UNKNOWN
+ FIXME
+
+Files: ./extras/Projucer/Source/BinaryData/offlinepage.html
+Copyright: NONE
+License: GPL
+ FIXME
+
+Files: ./examples/DemoRunner/DemoRunner.jucer
+Copyright: 2018, - ROLI Ltd." companyWebsite="https:www.juce.com/"
+License: UNKNOWN
+ FIXME
+
+Files: ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinResources.rsr
+Copyright: 1996-2001, Digidesign Inc.
+License: UNKNOWN
+ FIXME
+
+Files: ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h
+Copyright: const Speaker kSpeakerLfe = 1 << 3; /< Subbass (Lfe)
+License: UNKNOWN
+ FIXME
+
+Files: ./extras/Projucer/Source/BinaryData/projucer_EULA.txt
+Copyright: provided you comply with the provisions in clause 2, make a single copy of the Software for back-up purposes, provided that you reproduce on it all copyright and other proprietary notices that are on the original copy of the Software;
+License: UNKNOWN
+ FIXME
+
+Files: ./README.md
+Copyright: restrictions
+License: UNKNOWN
+ FIXME
+
+Files: ./modules/juce_audio_plugin_client/AUResources.r
+Copyright: s in this original Apple software (the
+License: UNKNOWN
+ FIXME
+
--- /dev/null
+/*
+ LV2 External UI extension
+ This work is in public domain.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ If you have questions, contact Filipe Coelho (aka falkTX) <falktx@falktx.com>
+ or ask in #lad channel, FreeNode IRC network.
+*/
+
+/**
+ @file lv2_external_ui.h
+ C header for the LV2 External UI extension <http://kxstudio.sf.net/ns/lv2ext/external-ui>.
+*/
+
+#ifndef LV2_EXTERNAL_UI_H
+#define LV2_EXTERNAL_UI_H
+
+#include "ui.h"
+
+#define LV2_EXTERNAL_UI_URI "http://kxstudio.sf.net/ns/lv2ext/external-ui"
+#define LV2_EXTERNAL_UI_PREFIX LV2_EXTERNAL_UI_URI "#"
+
+#define LV2_EXTERNAL_UI__Host LV2_EXTERNAL_UI_PREFIX "Host"
+#define LV2_EXTERNAL_UI__Widget LV2_EXTERNAL_UI_PREFIX "Widget"
+
+/** This extension used to be defined by a lv2plug.in URI */
+#define LV2_EXTERNAL_UI_DEPRECATED_URI "http://lv2plug.in/ns/extensions/ui#external"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * When LV2_EXTERNAL_UI__Widget UI is instantiated, the returned
+ * LV2UI_Widget handle must be cast to pointer to LV2_External_UI_Widget.
+ * UI is created in invisible state.
+ */
+typedef struct _LV2_External_UI_Widget {
+ /**
+ * Host calls this function regulary. UI library implementing the
+ * callback may do IPC or redraw the UI.
+ *
+ * @param _this_ the UI context
+ */
+ void (*run)(struct _LV2_External_UI_Widget * _this_);
+
+ /**
+ * Host calls this function to make the plugin UI visible.
+ *
+ * @param _this_ the UI context
+ */
+ void (*show)(struct _LV2_External_UI_Widget * _this_);
+
+ /**
+ * Host calls this function to make the plugin UI invisible again.
+ *
+ * @param _this_ the UI context
+ */
+ void (*hide)(struct _LV2_External_UI_Widget * _this_);
+
+} LV2_External_UI_Widget;
+
+#define LV2_EXTERNAL_UI_RUN(ptr) (ptr)->run(ptr)
+#define LV2_EXTERNAL_UI_SHOW(ptr) (ptr)->show(ptr)
+#define LV2_EXTERNAL_UI_HIDE(ptr) (ptr)->hide(ptr)
+
+/**
+ * On UI instantiation, host must supply LV2_EXTERNAL_UI__Host feature.
+ * LV2_Feature::data must be pointer to LV2_External_UI_Host.
+ */
+typedef struct _LV2_External_UI_Host {
+ /**
+ * Callback that plugin UI will call when UI (GUI window) is closed by user.
+ * This callback will be called during execution of LV2_External_UI_Widget::run()
+ * (i.e. not from background thread).
+ *
+ * After this callback is called, UI is defunct. Host must call LV2UI_Descriptor::cleanup().
+ * If host wants to make the UI visible again, the UI must be reinstantiated.
+ *
+ * @note When using the depreated URI LV2_EXTERNAL_UI_DEPRECATED_URI,
+ * some hosts will not call LV2UI_Descriptor::cleanup() as they should,
+ * and may call show() again without re-initialization.
+ *
+ * @param controller Host context associated with plugin UI, as
+ * supplied to LV2UI_Descriptor::instantiate().
+ */
+ void (*ui_closed)(LV2UI_Controller controller);
+
+ /**
+ * Optional (may be NULL) "user friendly" identifier which the UI
+ * may display to allow a user to easily associate this particular
+ * UI instance with the correct plugin instance as it is represented
+ * by the host (e.g. "track 1" or "channel 4").
+ *
+ * If supplied by host, the string will be referenced only during
+ * LV2UI_Descriptor::instantiate()
+ */
+ const char * plugin_human_id;
+
+} LV2_External_UI_Host;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* LV2_EXTERNAL_UI_H */
--- /dev/null
+/*
+ LV2 Programs Extension
+ Copyright 2012 Filipe Coelho <falktx@falktx.com>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+/**
+ @file lv2_programs.h
+ C header for the LV2 programs extension <http://kxstudio.sf.net/ns/lv2ext/programs>.
+*/
+
+#ifndef LV2_PROGRAMS_H
+#define LV2_PROGRAMS_H
+
+#include "lv2.h"
+#include "ui.h"
+
+#define LV2_PROGRAMS_URI "http://kxstudio.sf.net/ns/lv2ext/programs"
+#define LV2_PROGRAMS_PREFIX LV2_PROGRAMS_URI "#"
+
+#define LV2_PROGRAMS__Host LV2_PROGRAMS_PREFIX "Host"
+#define LV2_PROGRAMS__Interface LV2_PROGRAMS_PREFIX "Interface"
+#define LV2_PROGRAMS__UIInterface LV2_PROGRAMS_PREFIX "UIInterface"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void* LV2_Programs_Handle;
+
+typedef struct _LV2_Program_Descriptor {
+
+ /** Bank number for this program. Note that this extension does not
+ support MIDI-style separation of bank LSB and MSB values. There is
+ no restriction on the set of available banks: the numbers do not
+ need to be contiguous, there does not need to be a bank 0, etc. */
+ uint32_t bank;
+
+ /** Program number (unique within its bank) for this program. There is
+ no restriction on the set of available programs: the numbers do not
+ need to be contiguous, there does not need to be a program 0, etc. */
+ uint32_t program;
+
+ /** Name of the program. */
+ const char * name;
+
+} LV2_Program_Descriptor;
+
+/**
+ Programs extension, plugin data.
+
+ When the plugin's extension_data is called with argument LV2_PROGRAMS__Interface,
+ the plugin MUST return an LV2_Programs_Instance structure, which remains valid
+ for the lifetime of the plugin.
+*/
+typedef struct _LV2_Programs_Interface {
+ /**
+ * get_program()
+ *
+ * This member is a function pointer that provides a description
+ * of a program (named preset sound) available on this plugin.
+ *
+ * The index argument is an index into the plugin's list of
+ * programs, not a program number as represented by the Program
+ * field of the LV2_Program_Descriptor. (This distinction is
+ * needed to support plugins that use non-contiguous program or
+ * bank numbers.)
+ *
+ * This function returns a LV2_Program_Descriptor pointer that is
+ * guaranteed to be valid only until the next call to get_program
+ * or deactivate, on the same plugin instance. This function must
+ * return NULL if passed an index argument out of range, so that
+ * the host can use it to query the number of programs as well as
+ * their properties.
+ */
+ const LV2_Program_Descriptor *(*get_program)(LV2_Handle handle,
+ uint32_t index);
+
+ /**
+ * select_program()
+ *
+ * This member is a function pointer that selects a new program
+ * for this plugin. The program change should take effect
+ * immediately at the start of the next run() call. (This
+ * means that a host providing the capability of changing programs
+ * between any two notes on a track must vary the block size so as
+ * to place the program change at the right place. A host that
+ * wanted to avoid this would probably just instantiate a plugin
+ * for each program.)
+ *
+ * Plugins should ignore a select_program() call with an invalid
+ * bank or program.
+ *
+ * A plugin is not required to select any particular default
+ * program on activate(): it's the host's duty to set a program
+ * explicitly.
+ *
+ * A plugin is permitted to re-write the values of its input
+ * control ports when select_program is called. The host should
+ * re-read the input control port values and update its own
+ * records appropriately. (This is the only circumstance in which
+ * a LV2 plugin is allowed to modify its own control-input ports.)
+ */
+ void (*select_program)(LV2_Handle handle,
+ uint32_t bank,
+ uint32_t program);
+
+} LV2_Programs_Interface;
+
+/**
+ Programs extension, UI data.
+
+ When the UI's extension_data is called with argument LV2_PROGRAMS__UIInterface,
+ the UI MUST return an LV2_Programs_UI_Interface structure, which remains valid
+ for the lifetime of the UI.
+*/
+typedef struct _LV2_Programs_UI_Interface {
+ /**
+ * select_program()
+ *
+ * This is exactly the same as select_program in LV2_Programs_Instance,
+ * but this struct relates to the UI instead of the plugin.
+ *
+ * When called, UIs should update their state to match the selected program.
+ */
+ void (*select_program)(LV2UI_Handle handle,
+ uint32_t bank,
+ uint32_t program);
+
+} LV2_Programs_UI_Interface;
+
+/**
+ Feature data for LV2_PROGRAMS__Host.
+*/
+typedef struct _LV2_Programs_Host {
+ /**
+ * Opaque host data.
+ */
+ LV2_Programs_Handle handle;
+
+ /**
+ * program_changed()
+ *
+ * Tell the host to reload a plugin's program.
+ * Parameter handle MUST be the 'handle' member of this struct.
+ * Parameter index is program index to change.
+ * When index is -1, host should reload all the programs.
+ *
+ * The plugin MUST NEVER call this function on a RT context or during run().
+ *
+ * NOTE: This call is to inform the host about a program's bank, program or name change.
+ * It DOES NOT change the current selected program.
+ */
+ void (*program_changed)(LV2_Programs_Handle handle,
+ int32_t index);
+
+} LV2_Programs_Host;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* LV2_PROGRAMS_H */
--- /dev/null
+/*
+ ==============================================================================
+
+ Juce LV2 Wrapper
+
+ ==============================================================================
+*/
+
+// Your project must contain an AppConfig.h file with your project-specific settings in it,
+// and your header search path must make it accessible to the module's files.
+#include "AppConfig.h"
+
+#include "juce_audio_plugin_client/utility/juce_CheckSettingMacros.h"
+#include "juce_core/system/juce_TargetPlatform.h" // for JUCE_LINUX
+
+
+#if JucePlugin_Build_LV2
+
+/** Plugin requires processing with a fixed/constant block size */
+#ifndef JucePlugin_WantsLV2FixedBlockSize
+ #define JucePlugin_WantsLV2FixedBlockSize 0
+#endif
+
+/** Enable latency port */
+#ifndef JucePlugin_WantsLV2Latency
+ #define JucePlugin_WantsLV2Latency 1
+#endif
+
+/** Use non-parameter states */
+#ifndef JucePlugin_WantsLV2State
+ #define JucePlugin_WantsLV2State 1
+#endif
+
+/** States are strings, needs custom get/setStateInformationString */
+#ifndef JucePlugin_WantsLV2StateString
+ #define JucePlugin_WantsLV2StateString 0
+#endif
+
+/** Export presets */
+#ifndef JucePlugin_WantsLV2Presets
+ #define JucePlugin_WantsLV2Presets 1
+#endif
+
+/** Request time position */
+#ifndef JucePlugin_WantsLV2TimePos
+ #define JucePlugin_WantsLV2TimePos 1
+#endif
+
+/** Using string states require enabling states first */
+#if JucePlugin_WantsLV2StateString && ! JucePlugin_WantsLV2State
+ #undef JucePlugin_WantsLV2State
+ #define JucePlugin_WantsLV2State 1
+#endif
+
+#if JUCE_LINUX && ! JUCE_AUDIOPROCESSOR_NO_GUI
+ #include <X11/Xlib.h>
+ #undef KeyPress
+#endif
+
+#include <fstream>
+#include <iostream>
+
+// LV2 includes..
+#include <lv2/lv2plug.in/ns/lv2core/lv2.h>
+#include <lv2/lv2plug.in/ns/ext/atom/atom.h>
+#include <lv2/lv2plug.in/ns/ext/atom/util.h>
+#include <lv2/lv2plug.in/ns/ext/buf-size/buf-size.h>
+#include <lv2/lv2plug.in/ns/ext/instance-access/instance-access.h>
+#include <lv2/lv2plug.in/ns/ext/midi/midi.h>
+#include <lv2/lv2plug.in/ns/ext/options/options.h>
+#include <lv2/lv2plug.in/ns/ext/port-props/port-props.h>
+#include <lv2/lv2plug.in/ns/ext/presets/presets.h>
+#include <lv2/lv2plug.in/ns/ext/state/state.h>
+#include <lv2/lv2plug.in/ns/ext/time/time.h>
+#include <lv2/lv2plug.in/ns/extensions/ui/ui.h>
+#include <lv2/lv2plug.in/ns/ext/urid/urid.h>
+#include "includes/lv2_external_ui.h"
+#include "includes/lv2_programs.h"
+
+#include "../utility/juce_IncludeModuleHeaders.h"
+
+#define JUCE_LV2_STATE_STRING_URI "urn:juce:stateString"
+#define JUCE_LV2_STATE_BINARY_URI "urn:juce:stateBinary"
+
+//==============================================================================
+// Various helper functions for creating the ttl files
+
+#if JUCE_MAC
+ #define PLUGIN_EXT ".dylib"
+#elif JUCE_LINUX
+ #define PLUGIN_EXT ".so"
+#elif JUCE_WINDOWS
+ #define PLUGIN_EXT ".dll"
+#endif
+
+using namespace juce;
+
+/** Returns plugin type, defined in AppConfig.h or JucePluginCharacteristics.h */
+const String getPluginType()
+{
+ String pluginType;
+#ifdef JucePlugin_LV2Category
+ pluginType = "lv2:" JucePlugin_LV2Category;
+ pluginType += ", ";
+#elif JucePlugin_IsSynth
+ pluginType = "lv2:InstrumentPlugin, ";
+#endif
+ pluginType += "lv2:Plugin";
+ return pluginType;
+}
+
+/** Returns plugin URI */
+static const String& getPluginURI()
+{
+ // JucePlugin_LV2URI might be defined as a function (eg. allowing dynamic URIs based on filename)
+ static const String pluginURI(JucePlugin_LV2URI);
+ return pluginURI;
+}
+
+static Array<String> usedSymbols;
+
+/** Converts a parameter name to an LV2 compatible symbol. */
+const String nameToSymbol (const String& name, const uint32 portIndex)
+{
+ String symbol, trimmedName = name.trimStart().trimEnd().toLowerCase();
+
+ if (trimmedName.isEmpty())
+ {
+ symbol += "lv2_port_";
+ symbol += String(portIndex+1);
+ }
+ else
+ {
+ for (int i=0; i < trimmedName.length(); ++i)
+ {
+ const juce_wchar c = trimmedName[i];
+ if (i == 0 && std::isdigit(c))
+ symbol += "_";
+ else if (std::isalpha(c) || std::isdigit(c))
+ symbol += c;
+ else
+ symbol += "_";
+ }
+ }
+
+ // Do not allow identical symbols
+ if (usedSymbols.contains(symbol))
+ {
+ int offset = 2;
+ String offsetStr = "_2";
+ symbol += offsetStr;
+
+ while (usedSymbols.contains(symbol))
+ {
+ offset += 1;
+ String newOffsetStr = "_" + String(offset);
+ symbol = symbol.replace(offsetStr, newOffsetStr);
+ offsetStr = newOffsetStr;
+ }
+ }
+ usedSymbols.add(symbol);
+
+ return symbol;
+}
+
+/** Prevents NaN or out of 0.0<->1.0 bounds parameter values. */
+float safeParamValue (float value)
+{
+ if (std::isnan(value))
+ value = 0.0f;
+ else if (value < 0.0f)
+ value = 0.0f;
+ else if (value > 1.0f)
+ value = 1.0f;
+ return value;
+}
+
+/** Create the manifest.ttl file contents */
+const String makeManifestFile (AudioProcessor* const filter, const String& binary)
+{
+ const String& pluginURI(getPluginURI());
+ String text;
+
+ // Header
+ text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n";
+ text += "@prefix pset: <" LV2_PRESETS_PREFIX "> .\n";
+ text += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n";
+ text += "@prefix ui: <" LV2_UI_PREFIX "> .\n";
+ text += "\n";
+
+ // Plugin
+ text += "<" + pluginURI + ">\n";
+ text += " a lv2:Plugin ;\n";
+ text += " lv2:binary <" + binary + PLUGIN_EXT "> ;\n";
+ text += " rdfs:seeAlso <" + binary + ".ttl> .\n";
+ text += "\n";
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ // UIs
+ if (filter->hasEditor())
+ {
+ text += "<" + pluginURI + "#ExternalUI>\n";
+ text += " a <" LV2_EXTERNAL_UI__Widget "> ;\n";
+ text += " ui:binary <" + binary + PLUGIN_EXT "> ;\n";
+ text += " lv2:requiredFeature <" LV2_INSTANCE_ACCESS_URI "> ;\n";
+ text += " lv2:extensionData <" LV2_PROGRAMS__UIInterface "> .\n";
+ text += "\n";
+
+ text += "<" + pluginURI + "#ParentUI>\n";
+ #if JUCE_MAC
+ text += " a ui:CocoaUI ;\n";
+ #elif JUCE_LINUX
+ text += " a ui:X11UI ;\n";
+ #elif JUCE_WINDOWS
+ text += " a ui:WindowsUI ;\n";
+ #endif
+ text += " ui:binary <" + binary + PLUGIN_EXT "> ;\n";
+ text += " lv2:requiredFeature <" LV2_INSTANCE_ACCESS_URI "> ;\n";
+ text += " lv2:optionalFeature ui:noUserResize ;\n";
+ text += " lv2:extensionData <" LV2_PROGRAMS__UIInterface "> .\n";
+ text += "\n";
+ }
+#endif
+
+#if JucePlugin_WantsLV2Presets
+ const String presetSeparator(pluginURI.contains("#") ? ":" : "#");
+
+ // Presets
+ for (int i = 0; i < filter->getNumPrograms(); ++i)
+ {
+ text += "<" + pluginURI + presetSeparator + "preset" + String::formatted("%03i", i+1) + ">\n";
+ text += " a pset:Preset ;\n";
+ text += " lv2:appliesTo <" + pluginURI + "> ;\n";
+ text += " rdfs:label \"" + filter->getProgramName(i) + "\" ;\n";
+ text += " rdfs:seeAlso <presets.ttl> .\n";
+ text += "\n";
+ }
+#endif
+
+ return text;
+}
+
+/** Create the -plugin-.ttl file contents */
+const String makePluginFile (AudioProcessor* const filter, const int maxNumInputChannels, const int maxNumOutputChannels)
+{
+ const String& pluginURI(getPluginURI());
+ String text;
+
+ // Header
+ text += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n";
+ text += "@prefix doap: <http://usefulinc.com/ns/doap#> .\n";
+ text += "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n";
+ text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n";
+ text += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n";
+ text += "@prefix ui: <" LV2_UI_PREFIX "> .\n";
+ text += "\n";
+
+ // Plugin
+ text += "<" + pluginURI + ">\n";
+ text += " a " + getPluginType() + " ;\n";
+ text += " lv2:requiredFeature <" LV2_BUF_SIZE__boundedBlockLength "> ,\n";
+#if JucePlugin_WantsLV2FixedBlockSize
+ text += " <" LV2_BUF_SIZE__fixedBlockLength "> ,\n";
+#endif
+ text += " <" LV2_URID__map "> ;\n";
+ text += " lv2:extensionData <" LV2_OPTIONS__interface "> ,\n";
+#if JucePlugin_WantsLV2State
+ text += " <" LV2_STATE__interface "> ,\n";
+#endif
+ text += " <" LV2_PROGRAMS__Interface "> ;\n";
+ text += "\n";
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ // UIs
+ if (filter->hasEditor())
+ {
+ text += " ui:ui <" + pluginURI + "#ExternalUI> ,\n";
+ text += " <" + pluginURI + "#ParentUI> ;\n";
+ text += "\n";
+ }
+#endif
+
+ uint32 portIndex = 0;
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos)
+ // MIDI input
+ text += " lv2:port [\n";
+ text += " a lv2:InputPort, atom:AtomPort ;\n";
+ text += " atom:bufferType atom:Sequence ;\n";
+ #if JucePlugin_WantsMidiInput
+ text += " atom:supports <" LV2_MIDI__MidiEvent "> ;\n";
+ #endif
+ #if JucePlugin_WantsLV2TimePos
+ text += " atom:supports <" LV2_TIME__Position "> ;\n";
+ #endif
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"lv2_events_in\" ;\n";
+ text += " lv2:name \"Events Input\" ;\n";
+ text += " lv2:designation lv2:control ;\n";
+ #if ! JucePlugin_IsSynth
+ text += " lv2:portProperty lv2:connectionOptional ;\n";
+ #endif
+ text += " ] ;\n";
+ text += "\n";
+#endif
+
+#if JucePlugin_ProducesMidiOutput
+ // MIDI output
+ text += " lv2:port [\n";
+ text += " a lv2:OutputPort, atom:AtomPort ;\n";
+ text += " atom:bufferType atom:Sequence ;\n";
+ text += " atom:supports <" LV2_MIDI__MidiEvent "> ;\n";
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"lv2_midi_out\" ;\n";
+ text += " lv2:name \"MIDI Output\" ;\n";
+ text += " ] ;\n";
+ text += "\n";
+#endif
+
+ // Freewheel port
+ text += " lv2:port [\n";
+ text += " a lv2:InputPort, lv2:ControlPort ;\n";
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"lv2_freewheel\" ;\n";
+ text += " lv2:name \"Freewheel\" ;\n";
+ text += " lv2:default 0.0 ;\n";
+ text += " lv2:minimum 0.0 ;\n";
+ text += " lv2:maximum 1.0 ;\n";
+ text += " lv2:designation <" LV2_CORE__freeWheeling "> ;\n";
+ text += " lv2:portProperty lv2:toggled, <" LV2_PORT_PROPS__notOnGUI "> ;\n";
+ text += " ] ;\n";
+ text += "\n";
+
+#if JucePlugin_WantsLV2Latency
+ // Latency port
+ text += " lv2:port [\n";
+ text += " a lv2:OutputPort, lv2:ControlPort ;\n";
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"lv2_latency\" ;\n";
+ text += " lv2:name \"Latency\" ;\n";
+ text += " lv2:designation <" LV2_CORE__latency "> ;\n";
+ text += " lv2:portProperty lv2:reportsLatency, lv2:integer ;\n";
+ text += " ] ;\n";
+ text += "\n";
+#endif
+
+ // Audio inputs
+ for (int i=0; i < maxNumInputChannels; ++i)
+ {
+ if (i == 0)
+ text += " lv2:port [\n";
+ else
+ text += " [\n";
+
+ text += " a lv2:InputPort, lv2:AudioPort ;\n";
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"lv2_audio_in_" + String(i+1) + "\" ;\n";
+ text += " lv2:name \"Audio Input " + String(i+1) + "\" ;\n";
+
+ if (i+1 == maxNumInputChannels)
+ text += " ] ;\n\n";
+ else
+ text += " ] ,\n";
+ }
+
+ // Audio outputs
+ for (int i=0; i < maxNumOutputChannels; ++i)
+ {
+ if (i == 0)
+ text += " lv2:port [\n";
+ else
+ text += " [\n";
+
+ text += " a lv2:OutputPort, lv2:AudioPort ;\n";
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"lv2_audio_out_" + String(i+1) + "\" ;\n";
+ text += " lv2:name \"Audio Output " + String(i+1) + "\" ;\n";
+
+ if (i+1 == maxNumOutputChannels)
+ text += " ] ;\n\n";
+ else
+ text += " ] ,\n";
+ }
+
+ // Parameters
+ for (int i=0; i < filter->getNumParameters(); ++i)
+ {
+ if (i == 0)
+ text += " lv2:port [\n";
+ else
+ text += " [\n";
+
+ text += " a lv2:InputPort, lv2:ControlPort ;\n";
+ text += " lv2:index " + String(portIndex++) + " ;\n";
+ text += " lv2:symbol \"" + nameToSymbol(filter->getParameterName(i), i) + "\" ;\n";
+
+ if (filter->getParameterName(i).isNotEmpty())
+ text += " lv2:name \"" + filter->getParameterName(i) + "\" ;\n";
+ else
+ text += " lv2:name \"Port " + String(i+1) + "\" ;\n";
+
+ text += " lv2:default " + String::formatted("%f", safeParamValue(filter->getParameter(i))) + " ;\n";
+ text += " lv2:minimum 0.0 ;\n";
+ text += " lv2:maximum 1.0 ;\n";
+
+ if (! filter->isParameterAutomatable(i))
+ text += " lv2:portProperty <" LV2_PORT_PROPS__expensive "> ;\n";
+
+ if (i+1 == filter->getNumParameters())
+ text += " ] ;\n\n";
+ else
+ text += " ] ,\n";
+ }
+
+ text += " doap:name \"" + filter->getName() + "\" ;\n";
+ text += " doap:maintainer [ foaf:name \"" JucePlugin_Manufacturer "\" ] .\n";
+
+ return text;
+}
+
+/** Create the presets.ttl file contents */
+const String makePresetsFile (AudioProcessor* const filter)
+{
+ const String& pluginURI(getPluginURI());
+ String text;
+
+ // Header
+ text += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n";
+ text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n";
+ text += "@prefix pset: <" LV2_PRESETS_PREFIX "> .\n";
+ text += "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n";
+ text += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n";
+ text += "@prefix state: <" LV2_STATE_PREFIX "> .\n";
+ text += "@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n";
+ text += "\n";
+
+ // Presets
+ const int numPrograms = filter->getNumPrograms();
+ const String presetSeparator(pluginURI.contains("#") ? ":" : "#");
+
+ for (int i = 0; i < numPrograms; ++i)
+ {
+ std::cout << "\nSaving preset " << i+1 << "/" << numPrograms+1 << "...";
+ std::cout.flush();
+
+ String preset;
+
+ // Label
+ filter->setCurrentProgram(i);
+ preset += "<" + pluginURI + presetSeparator + "preset" + String::formatted("%03i", i+1) + "> a pset:Preset ;\n";
+
+ // State
+#if JucePlugin_WantsLV2State
+ preset += " state:state [\n";
+ #if JucePlugin_WantsLV2StateString
+ preset += " <" JUCE_LV2_STATE_STRING_URI ">\n";
+ preset += "\"\"\"\n";
+ preset += filter->getStateInformationString().replace("\r\n","\n");
+ preset += "\"\"\"\n";
+ #else
+ MemoryBlock chunkMemory;
+ filter->getCurrentProgramStateInformation(chunkMemory);
+ const String chunkString(Base64::toBase64(chunkMemory.getData(), chunkMemory.getSize()));
+
+ preset += " <" JUCE_LV2_STATE_BINARY_URI "> [\n";
+ preset += " a atom:Chunk ;\n";
+ preset += " rdf:value \"" + chunkString + "\"^^xsd:base64Binary ;\n";
+ preset += " ] ;\n";
+ #endif
+ if (filter->getNumParameters() == 0)
+ {
+ preset += " ] .\n\n";
+ continue;
+ }
+
+ preset += " ] ;\n\n";
+#endif
+
+ // Port values
+ usedSymbols.clear();
+
+ for (int j=0; j < filter->getNumParameters(); ++j)
+ {
+ if (j == 0)
+ preset += " lv2:port [\n";
+ else
+ preset += " [\n";
+
+ preset += " lv2:symbol \"" + nameToSymbol(filter->getParameterName(j), j) + "\" ;\n";
+ preset += " pset:value " + String::formatted("%f", safeParamValue(filter->getParameter(j))) + " ;\n";
+
+ if (j+1 == filter->getNumParameters())
+ preset += " ] ";
+ else
+ preset += " ] ,\n";
+ }
+ preset += ".\n\n";
+
+ text += preset;
+ }
+
+ return text;
+}
+
+/** Creates manifest.ttl, plugin.ttl and presets.ttl files */
+void createLv2Files(const char* basename)
+{
+ const ScopedJuceInitialiser_GUI juceInitialiser;
+ ScopedPointer<AudioProcessor> filter (createPluginFilterOfType (AudioProcessor::wrapperType_LV2));
+
+ String binary(basename);
+ String binaryTTL(binary + ".ttl");
+
+ std::cout << "Writing manifest.ttl..."; std::cout.flush();
+ std::fstream manifest("manifest.ttl", std::ios::out);
+ manifest << makeManifestFile(filter, binary) << std::endl;
+ manifest.close();
+ std::cout << " done!" << std::endl;
+
+ std::cout << "Writing " << binary << ".ttl..."; std::cout.flush();
+ std::fstream plugin(binaryTTL.toUTF8(), std::ios::out);
+ plugin << makePluginFile(filter, JucePlugin_MaxNumInputChannels, JucePlugin_MaxNumOutputChannels) << std::endl;
+ plugin.close();
+ std::cout << " done!" << std::endl;
+
+#if JucePlugin_WantsLV2Presets
+ std::cout << "Writing presets.ttl..."; std::cout.flush();
+ std::fstream presets("presets.ttl", std::ios::out);
+ presets << makePresetsFile(filter) << std::endl;
+ presets.close();
+ std::cout << " done!" << std::endl;
+#endif
+}
+
+//==============================================================================
+#if JUCE_LINUX
+
+class SharedMessageThread : public Thread
+{
+public:
+ SharedMessageThread()
+ : Thread ("Lv2MessageThread"),
+ initialised (false)
+ {
+ startThread (7);
+
+ while (! initialised)
+ sleep (1);
+ }
+
+ ~SharedMessageThread()
+ {
+ MessageManager::getInstance()->stopDispatchLoop();
+ waitForThreadToExit (5000);
+ }
+
+ void run() override
+ {
+ const ScopedJuceInitialiser_GUI juceInitialiser;
+
+ MessageManager::getInstance()->setCurrentThreadAsMessageThread();
+ initialised = true;
+
+ MessageManager::getInstance()->runDispatchLoop();
+ }
+
+private:
+ volatile bool initialised;
+};
+#endif
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+//==============================================================================
+/**
+ Lightweight DocumentWindow subclass for external ui
+*/
+class JuceLv2ExternalUIWindow : public DocumentWindow
+{
+public:
+ /** Creates a Document Window wrapper */
+ JuceLv2ExternalUIWindow (AudioProcessorEditor* editor, const String& title) :
+ DocumentWindow (title, Colours::white, DocumentWindow::minimiseButton | DocumentWindow::closeButton, false),
+ closed (false),
+ lastPos (0, 0)
+ {
+ setOpaque (true);
+ setContentNonOwned (editor, true);
+ setSize (editor->getWidth(), editor->getHeight());
+ setUsingNativeTitleBar (true);
+ }
+
+ /** Close button handler */
+ void closeButtonPressed()
+ {
+ saveLastPos();
+ removeFromDesktop();
+ closed = true;
+ }
+
+ void saveLastPos()
+ {
+ lastPos = getScreenPosition();
+ }
+
+ void restoreLastPos()
+ {
+ setTopLeftPosition (lastPos.getX(), lastPos.getY());
+ }
+
+ Point<int> getLastPos()
+ {
+ return lastPos;
+ }
+
+ bool isClosed()
+ {
+ return closed;
+ }
+
+ void reset()
+ {
+ closed = false;
+ }
+
+private:
+ bool closed;
+ Point<int> lastPos;
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2ExternalUIWindow);
+};
+
+//==============================================================================
+/**
+ Juce LV2 External UI handle
+*/
+class JuceLv2ExternalUIWrapper : public LV2_External_UI_Widget
+{
+public:
+ JuceLv2ExternalUIWrapper (AudioProcessorEditor* editor, const String& title)
+ : window (editor, title)
+ {
+ // external UI calls
+ run = doRun;
+ show = doShow;
+ hide = doHide;
+ }
+
+ ~JuceLv2ExternalUIWrapper()
+ {
+ if (window.isOnDesktop())
+ window.removeFromDesktop();
+ }
+
+ void close()
+ {
+ window.closeButtonPressed();
+ }
+
+ bool isClosed()
+ {
+ return window.isClosed();
+ }
+
+ void reset(const String& title)
+ {
+ window.reset();
+ window.setName(title);
+ }
+
+ void repaint()
+ {
+ window.repaint();
+ }
+
+ Point<int> getScreenPosition()
+ {
+ if (window.isClosed())
+ return window.getLastPos();
+ else
+ return window.getScreenPosition();
+ }
+
+ void setScreenPos (int x, int y)
+ {
+ if (! window.isClosed())
+ window.setTopLeftPosition(x, y);
+ }
+
+ //==============================================================================
+ static void doRun (LV2_External_UI_Widget* _this_)
+ {
+ const MessageManagerLock mmLock;
+ JuceLv2ExternalUIWrapper* self = (JuceLv2ExternalUIWrapper*) _this_;
+
+ if (! self->isClosed())
+ self->window.repaint();
+ }
+
+ static void doShow (LV2_External_UI_Widget* _this_)
+ {
+ const MessageManagerLock mmLock;
+ JuceLv2ExternalUIWrapper* self = (JuceLv2ExternalUIWrapper*) _this_;
+
+ if (! self->isClosed())
+ {
+ if (! self->window.isOnDesktop())
+ self->window.addToDesktop();
+
+ self->window.restoreLastPos();
+ self->window.setVisible(true);
+ }
+ }
+
+ static void doHide (LV2_External_UI_Widget* _this_)
+ {
+ const MessageManagerLock mmLock;
+ JuceLv2ExternalUIWrapper* self = (JuceLv2ExternalUIWrapper*) _this_;
+
+ if (! self->isClosed())
+ {
+ self->window.saveLastPos();
+ self->window.setVisible(false);
+ }
+ }
+
+private:
+ JuceLv2ExternalUIWindow window;
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2ExternalUIWrapper);
+};
+
+//==============================================================================
+/**
+ Juce LV2 Parent UI container, listens for resize events and passes them to ui-resize
+*/
+class JuceLv2ParentContainer : public Component
+{
+public:
+ JuceLv2ParentContainer (AudioProcessorEditor* editor, const LV2UI_Resize* uiResize_)
+ : uiResize(uiResize_)
+ {
+ setOpaque (true);
+ editor->setOpaque (true);
+ setBounds (editor->getBounds());
+
+ editor->setTopLeftPosition (0, 0);
+ addAndMakeVisible (editor);
+ }
+
+ ~JuceLv2ParentContainer()
+ {
+ }
+
+ void paint (Graphics&) {}
+ void paintOverChildren (Graphics&) {}
+
+ void childBoundsChanged (Component* child)
+ {
+ const int cw = child->getWidth();
+ const int ch = child->getHeight();
+
+#if JUCE_LINUX
+ XResizeWindow (display.display, (Window) getWindowHandle(), cw, ch);
+#else
+ setSize (cw, ch);
+#endif
+
+ if (uiResize != nullptr)
+ uiResize->ui_resize (uiResize->handle, cw, ch);
+ }
+
+ void reset (const LV2UI_Resize* uiResize_)
+ {
+ uiResize = uiResize_;
+
+ if (uiResize != nullptr)
+ uiResize->ui_resize (uiResize->handle, getWidth(), getHeight());
+ }
+
+private:
+ //==============================================================================
+ const LV2UI_Resize* uiResize;
+#if JUCE_LINUX
+ ScopedXDisplay display;
+#endif
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2ParentContainer);
+};
+
+//==============================================================================
+/**
+ Juce LV2 UI handle
+*/
+class JuceLv2UIWrapper : public AudioProcessorListener,
+ public Timer
+{
+public:
+ JuceLv2UIWrapper (AudioProcessor* filter_, LV2UI_Write_Function writeFunction_, LV2UI_Controller controller_,
+ LV2UI_Widget* widget, const LV2_Feature* const* features, bool isExternal_)
+ : filter (filter_),
+ writeFunction (writeFunction_),
+ controller (controller_),
+ isExternal (isExternal_),
+ controlPortOffset (0),
+ lastProgramCount (0),
+ uiTouch (nullptr),
+ programsHost (nullptr),
+ externalUIHost (nullptr),
+ lastExternalUIPos (-1, -1),
+ uiResize (nullptr)
+ {
+ jassert (filter != nullptr);
+
+ filter->addListener(this);
+
+ if (filter->hasEditor())
+ {
+ editor = filter->createEditorIfNeeded();
+
+ if (editor == nullptr)
+ {
+ *widget = nullptr;
+ return;
+ }
+ }
+
+ for (int i = 0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_UI__touch) == 0)
+ uiTouch = (const LV2UI_Touch*)features[i]->data;
+
+ else if (strcmp(features[i]->URI, LV2_PROGRAMS__Host) == 0)
+ programsHost = (const LV2_Programs_Host*)features[i]->data;
+ }
+
+ if (isExternal)
+ {
+ resetExternalUI (features);
+
+ if (externalUIHost != nullptr)
+ {
+ String title (filter->getName());
+
+ if (externalUIHost->plugin_human_id != nullptr)
+ title = externalUIHost->plugin_human_id;
+
+ externalUI = new JuceLv2ExternalUIWrapper (editor, title);
+ *widget = externalUI;
+ startTimer (100);
+ }
+ else
+ {
+ *widget = nullptr;
+ }
+ }
+ else
+ {
+ resetParentUI (features);
+
+ if (parentContainer != nullptr)
+ *widget = parentContainer->getWindowHandle();
+ else
+ *widget = nullptr;
+ }
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos)
+ controlPortOffset += 1;
+#endif
+#if JucePlugin_ProducesMidiOutput
+ controlPortOffset += 1;
+#endif
+ controlPortOffset += 1; // freewheel
+#if JucePlugin_WantsLV2Latency
+ controlPortOffset += 1;
+#endif
+ controlPortOffset += JucePlugin_MaxNumInputChannels;
+ controlPortOffset += JucePlugin_MaxNumOutputChannels;
+
+ lastProgramCount = filter->getNumPrograms();
+ }
+
+ ~JuceLv2UIWrapper()
+ {
+ PopupMenu::dismissAllActiveMenus();
+
+ filter->removeListener(this);
+
+ parentContainer = nullptr;
+ externalUI = nullptr;
+ externalUIHost = nullptr;
+
+ if (editor != nullptr)
+ {
+ filter->editorBeingDeleted (editor);
+ editor = nullptr;
+ }
+ }
+
+ //==============================================================================
+ // LV2 core calls
+
+ void lv2Cleanup()
+ {
+ const MessageManagerLock mmLock;
+
+ if (isExternal)
+ {
+ if (isTimerRunning())
+ stopTimer();
+
+ externalUIHost = nullptr;
+
+ if (externalUI != nullptr)
+ {
+ lastExternalUIPos = externalUI->getScreenPosition();
+ externalUI->close();
+ }
+ }
+ else
+ {
+ if (parentContainer)
+ {
+ parentContainer->setVisible (false);
+ if (parentContainer->isOnDesktop())
+ parentContainer->removeFromDesktop();
+ }
+ }
+ }
+
+ //==============================================================================
+ // Juce calls
+
+ void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue)
+ {
+ if (writeFunction != nullptr && controller != nullptr)
+ writeFunction (controller, index + controlPortOffset, sizeof (float), 0, &newValue);
+ }
+
+ void audioProcessorChanged (AudioProcessor*)
+ {
+ if (filter != nullptr && programsHost != nullptr)
+ {
+ if (filter->getNumPrograms() != lastProgramCount)
+ {
+ programsHost->program_changed (programsHost->handle, -1);
+ lastProgramCount = filter->getNumPrograms();
+ }
+ else
+ programsHost->program_changed (programsHost->handle, filter->getCurrentProgram());
+ }
+ }
+
+ void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int parameterIndex)
+ {
+ if (uiTouch != nullptr)
+ uiTouch->touch (uiTouch->handle, parameterIndex + controlPortOffset, true);
+ }
+
+ void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int parameterIndex)
+ {
+ if (uiTouch != nullptr)
+ uiTouch->touch (uiTouch->handle, parameterIndex + controlPortOffset, false);
+ }
+
+ void timerCallback()
+ {
+ if (externalUI != nullptr && externalUI->isClosed())
+ {
+ if (externalUIHost != nullptr)
+ externalUIHost->ui_closed (controller);
+
+ if (isTimerRunning())
+ stopTimer();
+ }
+ }
+
+ //==============================================================================
+ void resetIfNeeded (LV2UI_Write_Function writeFunction_, LV2UI_Controller controller_, LV2UI_Widget* widget,
+ const LV2_Feature* const* features)
+ {
+ writeFunction = writeFunction_;
+ controller = controller_;
+ uiTouch = nullptr;
+ programsHost = nullptr;
+
+ for (int i = 0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_UI__touch) == 0)
+ uiTouch = (const LV2UI_Touch*)features[i]->data;
+
+ else if (strcmp(features[i]->URI, LV2_PROGRAMS__Host) == 0)
+ programsHost = (const LV2_Programs_Host*)features[i]->data;
+ }
+
+ if (isExternal)
+ {
+ resetExternalUI (features);
+ *widget = externalUI;
+ }
+ else
+ {
+ resetParentUI (features);
+ *widget = parentContainer->getWindowHandle();
+ }
+ }
+
+ void repaint()
+ {
+ const MessageManagerLock mmLock;
+
+ if (editor != nullptr)
+ editor->repaint();
+
+ if (parentContainer != nullptr)
+ parentContainer->repaint();
+
+ if (externalUI != nullptr)
+ externalUI->repaint();
+ }
+
+private:
+ AudioProcessor* const filter;
+ ScopedPointer<AudioProcessorEditor> editor;
+
+ LV2UI_Write_Function writeFunction;
+ LV2UI_Controller controller;
+ const bool isExternal;
+
+ uint32 controlPortOffset;
+ int lastProgramCount;
+
+ const LV2UI_Touch* uiTouch;
+ const LV2_Programs_Host* programsHost;
+
+ ScopedPointer<JuceLv2ExternalUIWrapper> externalUI;
+ const LV2_External_UI_Host* externalUIHost;
+ Point<int> lastExternalUIPos;
+
+ ScopedPointer<JuceLv2ParentContainer> parentContainer;
+ const LV2UI_Resize* uiResize;
+
+#if JUCE_LINUX
+ ScopedXDisplay display;
+#endif
+
+ //==============================================================================
+ void resetExternalUI (const LV2_Feature* const* features)
+ {
+ externalUIHost = nullptr;
+
+ for (int i = 0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_EXTERNAL_UI__Host) == 0)
+ {
+ externalUIHost = (const LV2_External_UI_Host*)features[i]->data;
+ break;
+ }
+ }
+
+ if (externalUI != nullptr)
+ {
+ String title(filter->getName());
+
+ if (externalUIHost->plugin_human_id != nullptr)
+ title = externalUIHost->plugin_human_id;
+
+ if (lastExternalUIPos.getX() != -1 && lastExternalUIPos.getY() != -1)
+ externalUI->setScreenPos(lastExternalUIPos.getX(), lastExternalUIPos.getY());
+
+ externalUI->reset(title);
+ startTimer (100);
+ }
+ }
+
+ void resetParentUI (const LV2_Feature* const* features)
+ {
+ void* parent = nullptr;
+ uiResize = nullptr;
+
+ for (int i = 0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_UI__parent) == 0)
+ parent = features[i]->data;
+
+ else if (strcmp(features[i]->URI, LV2_UI__resize) == 0)
+ uiResize = (const LV2UI_Resize*)features[i]->data;
+ }
+
+ if (parent != nullptr)
+ {
+ if (parentContainer == nullptr)
+ parentContainer = new JuceLv2ParentContainer (editor, uiResize);
+
+ parentContainer->setVisible (false);
+
+ if (parentContainer->isOnDesktop())
+ parentContainer->removeFromDesktop();
+
+ parentContainer->addToDesktop (0, parent);
+
+#if JUCE_LINUX
+ Window hostWindow = (Window) parent;
+ Window editorWnd = (Window) parentContainer->getWindowHandle();
+ XReparentWindow (display.display, editorWnd, hostWindow, 0, 0);
+#endif
+
+ parentContainer->reset (uiResize);
+ parentContainer->setVisible (true);
+ }
+ }
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2UIWrapper)
+};
+
+#endif /* JUCE_AUDIOPROCESSOR_NO_GUI */
+
+//==============================================================================
+/**
+ Juce LV2 handle
+*/
+class JuceLv2Wrapper : public AudioPlayHead
+{
+public:
+ //==============================================================================
+ JuceLv2Wrapper (double sampleRate_, const LV2_Feature* const* features)
+ : numInChans (JucePlugin_MaxNumInputChannels),
+ numOutChans (JucePlugin_MaxNumOutputChannels),
+ bufferSize (2048),
+ sampleRate (sampleRate_),
+ uridMap (nullptr),
+ uridAtomBlank (0),
+ uridAtomObject (0),
+ uridAtomDouble (0),
+ uridAtomFloat (0),
+ uridAtomInt (0),
+ uridAtomLong (0),
+ uridAtomSequence (0),
+ uridMidiEvent (0),
+ uridTimePos (0),
+ uridTimeBar (0),
+ uridTimeBarBeat (0),
+ uridTimeBeatsPerBar (0),
+ uridTimeBeatsPerMinute (0),
+ uridTimeBeatUnit (0),
+ uridTimeFrame (0),
+ uridTimeSpeed (0),
+ usingNominalBlockLength (false)
+ {
+ {
+ const MessageManagerLock mmLock;
+ filter = createPluginFilterOfType (AudioProcessor::wrapperType_LV2);
+ }
+ jassert (filter != nullptr);
+
+ filter->setPlayConfigDetails (numInChans, numOutChans, 0, 0);
+ filter->setPlayHead (this);
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos)
+ portEventsIn = nullptr;
+#endif
+#if JucePlugin_ProducesMidiOutput
+ portMidiOut = nullptr;
+#endif
+
+ portFreewheel = nullptr;
+
+#if JucePlugin_WantsLV2Latency
+ portLatency = nullptr;
+#endif
+
+ for (int i=0; i < numInChans; ++i)
+ portAudioIns[i] = nullptr;
+ for (int i=0; i < numOutChans; ++i)
+ portAudioOuts[i] = nullptr;
+
+ portControls.insertMultiple (0, nullptr, filter->getNumParameters());
+
+ for (int i=0; i < filter->getNumParameters(); ++i)
+ lastControlValues.add (filter->getParameter(i));
+
+ curPosInfo.resetToDefault();
+
+ // we need URID_Map first
+ for (int i=0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_URID__map) == 0)
+ {
+ uridMap = (const LV2_URID_Map*)features[i]->data;
+ break;
+ }
+ }
+
+ // we require uridMap to work properly (it's set as required feature)
+ jassert (uridMap != nullptr);
+
+ if (uridMap != nullptr)
+ {
+ uridAtomBlank = uridMap->map(uridMap->handle, LV2_ATOM__Blank);
+ uridAtomObject = uridMap->map(uridMap->handle, LV2_ATOM__Object);
+ uridAtomDouble = uridMap->map(uridMap->handle, LV2_ATOM__Double);
+ uridAtomFloat = uridMap->map(uridMap->handle, LV2_ATOM__Float);
+ uridAtomInt = uridMap->map(uridMap->handle, LV2_ATOM__Int);
+ uridAtomLong = uridMap->map(uridMap->handle, LV2_ATOM__Long);
+ uridAtomSequence = uridMap->map(uridMap->handle, LV2_ATOM__Sequence);
+ uridMidiEvent = uridMap->map(uridMap->handle, LV2_MIDI__MidiEvent);
+ uridTimePos = uridMap->map(uridMap->handle, LV2_TIME__Position);
+ uridTimeBar = uridMap->map(uridMap->handle, LV2_TIME__bar);
+ uridTimeBarBeat = uridMap->map(uridMap->handle, LV2_TIME__barBeat);
+ uridTimeBeatsPerBar = uridMap->map(uridMap->handle, LV2_TIME__beatsPerBar);
+ uridTimeBeatsPerMinute = uridMap->map(uridMap->handle, LV2_TIME__beatsPerMinute);
+ uridTimeBeatUnit = uridMap->map(uridMap->handle, LV2_TIME__beatUnit);
+ uridTimeFrame = uridMap->map(uridMap->handle, LV2_TIME__frame);
+ uridTimeSpeed = uridMap->map(uridMap->handle, LV2_TIME__speed);
+
+ for (int i=0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_OPTIONS__options) == 0)
+ {
+ const LV2_Options_Option* options = (const LV2_Options_Option*)features[i]->data;
+
+ for (int j=0; options[j].key != 0; ++j)
+ {
+ if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__nominalBlockLength))
+ {
+ if (options[j].type == uridAtomInt)
+ {
+ bufferSize = *(int*)options[j].value;
+ usingNominalBlockLength = true;
+ }
+ else
+ {
+ std::cerr << "Host provides nominalBlockLength but has wrong value type" << std::endl;
+ }
+ break;
+ }
+
+ if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__maxBlockLength))
+ {
+ if (options[j].type == uridAtomInt)
+ bufferSize = *(int*)options[j].value;
+ else
+ std::cerr << "Host provides maxBlockLength but has wrong value type" << std::endl;
+
+ // no break, continue in case host supports nominalBlockLength
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ progDesc.bank = 0;
+ progDesc.program = 0;
+ progDesc.name = nullptr;
+ }
+
+ ~JuceLv2Wrapper ()
+ {
+ const MessageManagerLock mmLock;
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ ui = nullptr;
+#endif
+ filter = nullptr;
+
+ if (progDesc.name != nullptr)
+ free((void*)progDesc.name);
+
+ portControls.clear();
+ lastControlValues.clear();
+ }
+
+ //==============================================================================
+ // LV2 core calls
+
+ void lv2ConnectPort (uint32 portId, void* dataLocation)
+ {
+ uint32 index = 0;
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos)
+ if (portId == index++)
+ {
+ portEventsIn = (LV2_Atom_Sequence*)dataLocation;
+ return;
+ }
+#endif
+
+#if JucePlugin_ProducesMidiOutput
+ if (portId == index++)
+ {
+ portMidiOut = (LV2_Atom_Sequence*)dataLocation;
+ return;
+ }
+#endif
+
+ if (portId == index++)
+ {
+ portFreewheel = (float*)dataLocation;
+ return;
+ }
+
+#if JucePlugin_WantsLV2Latency
+ if (portId == index++)
+ {
+ portLatency = (float*)dataLocation;
+ return;
+ }
+#endif
+
+ for (int i=0; i < numInChans; ++i)
+ {
+ if (portId == index++)
+ {
+ portAudioIns[i] = (float*)dataLocation;
+ return;
+ }
+ }
+
+ for (int i=0; i < numOutChans; ++i)
+ {
+ if (portId == index++)
+ {
+ portAudioOuts[i] = (float*)dataLocation;
+ return;
+ }
+ }
+
+ for (int i=0; i < filter->getNumParameters(); ++i)
+ {
+ if (portId == index++)
+ {
+ portControls.set(i, (float*)dataLocation);
+ return;
+ }
+ }
+ }
+
+ void lv2Activate()
+ {
+ jassert (filter != nullptr);
+
+ filter->prepareToPlay (sampleRate, bufferSize);
+ filter->setPlayConfigDetails (numInChans, numOutChans, sampleRate, bufferSize);
+
+ channels.calloc (numInChans + numOutChans);
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_ProducesMidiOutput)
+ midiEvents.ensureSize (2048);
+ midiEvents.clear();
+#endif
+ }
+
+ void lv2Deactivate()
+ {
+ jassert (filter != nullptr);
+
+ filter->releaseResources();
+
+ channels.free();
+ }
+
+ void lv2Run (uint32 sampleCount)
+ {
+ jassert (filter != nullptr);
+
+#if JucePlugin_WantsLV2Latency
+ if (portLatency != nullptr)
+ *portLatency = filter->getLatencySamples();
+#endif
+
+ if (portFreewheel != nullptr)
+ filter->setNonRealtime (*portFreewheel >= 0.5f);
+
+ if (sampleCount == 0)
+ {
+ /**
+ LV2 pre-roll
+ Hosts might use this to force plugins to update its output control ports.
+ (plugins can only access port locations during run) */
+ return;
+ }
+
+ // Check for updated parameters
+ {
+ float curValue;
+
+ for (int i = 0; i < portControls.size(); ++i)
+ {
+ if (portControls[i] != nullptr)
+ {
+ curValue = *portControls[i];
+
+ if (lastControlValues[i] != curValue)
+ {
+ filter->setParameter (i, curValue);
+ lastControlValues.setUnchecked (i, curValue);
+ }
+ }
+ }
+ }
+
+ {
+ const ScopedLock sl (filter->getCallbackLock());
+
+ if (filter->isSuspended() && false)
+ {
+ for (int i = 0; i < numOutChans; ++i)
+ zeromem (portAudioOuts[i], sizeof (float) * sampleCount);
+ }
+ else
+ {
+ int i;
+ for (i = 0; i < numOutChans; ++i)
+ {
+ channels[i] = portAudioOuts[i];
+
+ if (i < numInChans && portAudioIns[i] != portAudioOuts[i])
+ FloatVectorOperations::copy (portAudioOuts [i], portAudioIns[i], sampleCount);
+ }
+
+ for (; i < numInChans; ++i)
+ channels [i] = portAudioIns[i];
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos)
+ if (portEventsIn != nullptr)
+ {
+ midiEvents.clear();
+
+ LV2_ATOM_SEQUENCE_FOREACH(portEventsIn, iter)
+ {
+ const LV2_Atom_Event* event = (const LV2_Atom_Event*)iter;
+
+ if (event == nullptr)
+ continue;
+ if (event->time.frames >= sampleCount)
+ break;
+
+ #if JucePlugin_WantsMidiInput
+ if (event->body.type == uridMidiEvent)
+ {
+ const uint8* data = (const uint8*)(event + 1);
+ midiEvents.addEvent(data, event->body.size, event->time.frames);
+ continue;
+ }
+ #endif
+ #if JucePlugin_WantsLV2TimePos
+ if (event->body.type == uridAtomBlank || event->body.type == uridAtomObject)
+ {
+ const LV2_Atom_Object* obj = (LV2_Atom_Object*)&event->body;
+
+ if (obj->body.otype != uridTimePos)
+ continue;
+
+ LV2_Atom* bar = nullptr;
+ LV2_Atom* barBeat = nullptr;
+ LV2_Atom* beatUnit = nullptr;
+ LV2_Atom* beatsPerBar = nullptr;
+ LV2_Atom* beatsPerMinute = nullptr;
+ LV2_Atom* frame = nullptr;
+ LV2_Atom* speed = nullptr;
+
+ lv2_atom_object_get (obj,
+ uridTimeBar, &bar,
+ uridTimeBarBeat, &barBeat,
+ uridTimeBeatUnit, &beatUnit,
+ uridTimeBeatsPerBar, &beatsPerBar,
+ uridTimeBeatsPerMinute, &beatsPerMinute,
+ uridTimeFrame, &frame,
+ uridTimeSpeed, &speed,
+ nullptr);
+
+ // need to handle this first as other values depend on it
+ if (speed != nullptr)
+ {
+ /**/ if (speed->type == uridAtomDouble)
+ lastPositionData.speed = ((LV2_Atom_Double*)speed)->body;
+ else if (speed->type == uridAtomFloat)
+ lastPositionData.speed = ((LV2_Atom_Float*)speed)->body;
+ else if (speed->type == uridAtomInt)
+ lastPositionData.speed = ((LV2_Atom_Int*)speed)->body;
+ else if (speed->type == uridAtomLong)
+ lastPositionData.speed = ((LV2_Atom_Long*)speed)->body;
+
+ curPosInfo.isPlaying = lastPositionData.speed != 0.0;
+ }
+
+ if (bar != nullptr)
+ {
+ /**/ if (bar->type == uridAtomDouble)
+ lastPositionData.bar = ((LV2_Atom_Double*)bar)->body;
+ else if (bar->type == uridAtomFloat)
+ lastPositionData.bar = ((LV2_Atom_Float*)bar)->body;
+ else if (bar->type == uridAtomInt)
+ lastPositionData.bar = ((LV2_Atom_Int*)bar)->body;
+ else if (bar->type == uridAtomLong)
+ lastPositionData.bar = ((LV2_Atom_Long*)bar)->body;
+ }
+
+ if (barBeat != nullptr)
+ {
+ /**/ if (barBeat->type == uridAtomDouble)
+ lastPositionData.barBeat = ((LV2_Atom_Double*)barBeat)->body;
+ else if (barBeat->type == uridAtomFloat)
+ lastPositionData.barBeat = ((LV2_Atom_Float*)barBeat)->body;
+ else if (barBeat->type == uridAtomInt)
+ lastPositionData.barBeat = ((LV2_Atom_Int*)barBeat)->body;
+ else if (barBeat->type == uridAtomLong)
+ lastPositionData.barBeat = ((LV2_Atom_Long*)barBeat)->body;
+ }
+
+ if (beatUnit != nullptr)
+ {
+ /**/ if (beatUnit->type == uridAtomDouble)
+ lastPositionData.beatUnit = ((LV2_Atom_Double*)beatUnit)->body;
+ else if (beatUnit->type == uridAtomFloat)
+ lastPositionData.beatUnit = ((LV2_Atom_Float*)beatUnit)->body;
+ else if (beatUnit->type == uridAtomInt)
+ lastPositionData.beatUnit = ((LV2_Atom_Int*)beatUnit)->body;
+ else if (beatUnit->type == uridAtomLong)
+ lastPositionData.beatUnit = ((LV2_Atom_Long*)beatUnit)->body;
+
+ if (lastPositionData.beatUnit > 0)
+ curPosInfo.timeSigDenominator = lastPositionData.beatUnit;
+ }
+
+ if (beatsPerBar != nullptr)
+ {
+ /**/ if (beatsPerBar->type == uridAtomDouble)
+ lastPositionData.beatsPerBar = ((LV2_Atom_Double*)beatsPerBar)->body;
+ else if (beatsPerBar->type == uridAtomFloat)
+ lastPositionData.beatsPerBar = ((LV2_Atom_Float*)beatsPerBar)->body;
+ else if (beatsPerBar->type == uridAtomInt)
+ lastPositionData.beatsPerBar = ((LV2_Atom_Int*)beatsPerBar)->body;
+ else if (beatsPerBar->type == uridAtomLong)
+ lastPositionData.beatsPerBar = ((LV2_Atom_Long*)beatsPerBar)->body;
+
+ if (lastPositionData.beatsPerBar > 0.0f)
+ curPosInfo.timeSigNumerator = lastPositionData.beatsPerBar;
+ }
+
+ if (beatsPerMinute != nullptr)
+ {
+ /**/ if (beatsPerMinute->type == uridAtomDouble)
+ lastPositionData.beatsPerMinute = ((LV2_Atom_Double*)beatsPerMinute)->body;
+ else if (beatsPerMinute->type == uridAtomFloat)
+ lastPositionData.beatsPerMinute = ((LV2_Atom_Float*)beatsPerMinute)->body;
+ else if (beatsPerMinute->type == uridAtomInt)
+ lastPositionData.beatsPerMinute = ((LV2_Atom_Int*)beatsPerMinute)->body;
+ else if (beatsPerMinute->type == uridAtomLong)
+ lastPositionData.beatsPerMinute = ((LV2_Atom_Long*)beatsPerMinute)->body;
+
+ if (lastPositionData.beatsPerMinute > 0.0f)
+ {
+ curPosInfo.bpm = lastPositionData.beatsPerMinute;
+
+ if (lastPositionData.speed != 0)
+ curPosInfo.bpm *= std::abs(lastPositionData.speed);
+ }
+ }
+
+ if (frame != nullptr)
+ {
+ /**/ if (frame->type == uridAtomDouble)
+ lastPositionData.frame = ((LV2_Atom_Double*)frame)->body;
+ else if (frame->type == uridAtomFloat)
+ lastPositionData.frame = ((LV2_Atom_Float*)frame)->body;
+ else if (frame->type == uridAtomInt)
+ lastPositionData.frame = ((LV2_Atom_Int*)frame)->body;
+ else if (frame->type == uridAtomLong)
+ lastPositionData.frame = ((LV2_Atom_Long*)frame)->body;
+
+ if (lastPositionData.frame >= 0)
+ {
+ curPosInfo.timeInSamples = lastPositionData.frame;
+ curPosInfo.timeInSeconds = double(curPosInfo.timeInSamples)/sampleRate;
+ }
+ }
+
+ if (lastPositionData.bar >= 0 && lastPositionData.beatsPerBar > 0.0f)
+ {
+ curPosInfo.ppqPositionOfLastBarStart = lastPositionData.bar * lastPositionData.beatsPerBar;
+
+ if (lastPositionData.barBeat >= 0.0f)
+ curPosInfo.ppqPosition = curPosInfo.ppqPositionOfLastBarStart + lastPositionData.barBeat;
+ }
+
+ lastPositionData.extraValid = (lastPositionData.beatsPerMinute > 0.0 &&
+ lastPositionData.beatUnit > 0 &&
+ lastPositionData.beatsPerBar > 0.0f);
+ }
+ #endif
+ }
+ }
+#endif
+ {
+ AudioSampleBuffer chans (channels, jmax (numInChans, numOutChans), sampleCount);
+ filter->processBlock (chans, midiEvents);
+ }
+ }
+ }
+
+#if JucePlugin_WantsLV2TimePos
+ // update timePos for next callback
+ if (lastPositionData.speed != 0.0)
+ {
+ if (lastPositionData.speed > 0.0)
+ {
+ // playing forwards
+ lastPositionData.frame += sampleCount;
+ }
+ else
+ {
+ // playing backwards
+ lastPositionData.frame -= sampleCount;
+
+ if (lastPositionData.frame < 0)
+ lastPositionData.frame = 0;
+ }
+
+ curPosInfo.timeInSamples = lastPositionData.frame;
+ curPosInfo.timeInSeconds = double(curPosInfo.timeInSamples)/sampleRate;
+
+ if (lastPositionData.extraValid)
+ {
+ const double beatsPerMinute = lastPositionData.beatsPerMinute * lastPositionData.speed;
+ const double framesPerBeat = 60.0 * sampleRate / beatsPerMinute;
+ const double addedBarBeats = double(sampleCount) / framesPerBeat;
+
+ if (lastPositionData.bar >= 0 && lastPositionData.barBeat >= 0.0f)
+ {
+ lastPositionData.bar += std::floor((lastPositionData.barBeat+addedBarBeats)/
+ lastPositionData.beatsPerBar);
+ lastPositionData.barBeat = std::fmod(lastPositionData.barBeat+addedBarBeats,
+ lastPositionData.beatsPerBar);
+
+ if (lastPositionData.bar < 0)
+ lastPositionData.bar = 0;
+
+ curPosInfo.ppqPositionOfLastBarStart = lastPositionData.bar * lastPositionData.beatsPerBar;
+ curPosInfo.ppqPosition = curPosInfo.ppqPositionOfLastBarStart + lastPositionData.barBeat;
+ }
+
+ curPosInfo.bpm = std::abs(beatsPerMinute);
+ }
+ }
+#endif
+
+#if JucePlugin_ProducesMidiOutput
+ if (portMidiOut != nullptr)
+ {
+ const uint32_t capacity = portMidiOut->atom.size;
+
+ portMidiOut->atom.size = sizeof(LV2_Atom_Sequence_Body);
+ portMidiOut->atom.type = uridAtomSequence;
+ portMidiOut->body.unit = 0;
+ portMidiOut->body.pad = 0;
+
+ if (! midiEvents.isEmpty())
+ {
+ const uint8* midiEventData;
+ int midiEventSize, midiEventPosition;
+ MidiBuffer::Iterator i (midiEvents);
+
+ uint32_t size, offset = 0;
+ LV2_Atom_Event* aev;
+
+ while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition))
+ {
+ jassert (midiEventPosition >= 0 && midiEventPosition < (int)sampleCount);
+
+ if (sizeof(LV2_Atom_Event) + midiEventSize > capacity - offset)
+ break;
+
+ aev = (LV2_Atom_Event*)((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, portMidiOut) + offset);
+ aev->time.frames = midiEventPosition;
+ aev->body.type = uridMidiEvent;
+ aev->body.size = midiEventSize;
+ memcpy(LV2_ATOM_BODY(&aev->body), midiEventData, midiEventSize);
+
+ size = lv2_atom_pad_size(sizeof(LV2_Atom_Event) + midiEventSize);
+ offset += size;
+ portMidiOut->atom.size += size;
+ }
+
+ midiEvents.clear();
+ }
+ } else
+#endif
+ if (! midiEvents.isEmpty())
+ {
+ midiEvents.clear();
+ }
+ }
+
+ //==============================================================================
+ // LV2 extended calls
+
+ uint32_t lv2GetOptions (LV2_Options_Option* options)
+ {
+ // currently unused
+ ignoreUnused(options);
+
+ return LV2_OPTIONS_SUCCESS;
+ }
+
+ uint32_t lv2SetOptions (const LV2_Options_Option* options)
+ {
+ for (int j=0; options[j].key != 0; ++j)
+ {
+ if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__nominalBlockLength))
+ {
+ if (options[j].type == uridAtomInt)
+ bufferSize = *(int*)options[j].value;
+ else
+ std::cerr << "Host changed nominalBlockLength but with wrong value type" << std::endl;
+ }
+ else if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__maxBlockLength) && ! usingNominalBlockLength)
+ {
+ if (options[j].type == uridAtomInt)
+ bufferSize = *(int*)options[j].value;
+ else
+ std::cerr << "Host changed maxBlockLength but with wrong value type" << std::endl;
+ }
+ else if (options[j].key == uridMap->map(uridMap->handle, LV2_CORE__sampleRate))
+ {
+ if (options[j].type == uridAtomDouble)
+ sampleRate = *(double*)options[j].value;
+ else
+ std::cerr << "Host changed sampleRate but with wrong value type" << std::endl;
+ }
+ }
+
+ return LV2_OPTIONS_SUCCESS;
+ }
+
+ const LV2_Program_Descriptor* lv2GetProgram (uint32_t index)
+ {
+ jassert (filter != nullptr);
+
+ if (progDesc.name != nullptr)
+ {
+ free((void*)progDesc.name);
+ progDesc.name = nullptr;
+ }
+
+ if ((int)index < filter->getNumPrograms())
+ {
+ progDesc.bank = index / 128;
+ progDesc.program = index % 128;
+ progDesc.name = strdup(filter->getProgramName(index).toUTF8());
+ return &progDesc;
+ }
+
+ return nullptr;
+ }
+
+ void lv2SelectProgram (uint32_t bank, uint32_t program)
+ {
+ jassert (filter != nullptr);
+
+ int realProgram = bank * 128 + program;
+
+ if (realProgram < filter->getNumPrograms())
+ {
+ filter->setCurrentProgram(realProgram);
+
+ // update input control ports now
+ for (int i = 0; i < portControls.size(); ++i)
+ {
+ float value = filter->getParameter(i);
+
+ if (portControls[i] != nullptr)
+ *portControls[i] = value;
+
+ lastControlValues.set(i, value);
+ }
+ }
+ }
+
+ LV2_State_Status lv2SaveState (LV2_State_Store_Function store, LV2_State_Handle stateHandle)
+ {
+ jassert (filter != nullptr);
+
+#if JucePlugin_WantsLV2StateString
+ String stateData(filter->getStateInformationString().replace("\r\n","\n"));
+ CharPointer_UTF8 charData(stateData.toUTF8());
+
+ store (stateHandle,
+ uridMap->map(uridMap->handle, JUCE_LV2_STATE_STRING_URI),
+ charData.getAddress(),
+ charData.sizeInBytes(),
+ uridMap->map(uridMap->handle, LV2_ATOM__String),
+ LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE);
+#else
+ MemoryBlock chunkMemory;
+ filter->getCurrentProgramStateInformation (chunkMemory);
+
+ store (stateHandle,
+ uridMap->map(uridMap->handle, JUCE_LV2_STATE_BINARY_URI),
+ chunkMemory.getData(),
+ chunkMemory.getSize(),
+ uridMap->map(uridMap->handle, LV2_ATOM__Chunk),
+ LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE);
+#endif
+
+ return LV2_STATE_SUCCESS;
+ }
+
+ LV2_State_Status lv2RestoreState (LV2_State_Retrieve_Function retrieve, LV2_State_Handle stateHandle, uint32_t flags)
+ {
+ jassert (filter != nullptr);
+
+ size_t size = 0;
+ uint32 type = 0;
+ const void* data = retrieve (stateHandle,
+#if JucePlugin_WantsLV2StateString
+ uridMap->map(uridMap->handle, JUCE_LV2_STATE_STRING_URI),
+#else
+ uridMap->map(uridMap->handle, JUCE_LV2_STATE_BINARY_URI),
+#endif
+ &size, &type, &flags);
+
+ if (data == nullptr || size == 0 || type == 0)
+ return LV2_STATE_ERR_UNKNOWN;
+
+#if JucePlugin_WantsLV2StateString
+ if (type == uridMap->map (uridMap->handle, LV2_ATOM__String))
+ {
+ String stateData (CharPointer_UTF8(static_cast<const char*>(data)));
+ filter->setStateInformationString (stateData);
+
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ if (ui != nullptr)
+ ui->repaint();
+ #endif
+
+ return LV2_STATE_SUCCESS;
+ }
+#else
+ if (type == uridMap->map (uridMap->handle, LV2_ATOM__Chunk))
+ {
+ filter->setCurrentProgramStateInformation (data, size);
+
+ #if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ if (ui != nullptr)
+ ui->repaint();
+ #endif
+
+ return LV2_STATE_SUCCESS;
+ }
+#endif
+
+ return LV2_STATE_ERR_BAD_TYPE;
+ }
+
+ //==============================================================================
+ // Juce calls
+
+ bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info)
+ {
+#if JucePlugin_WantsLV2TimePos
+ info = curPosInfo;
+ return true;
+#else
+ ignoreUnused(info);
+ return false;
+#endif
+ }
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ //==============================================================================
+ JuceLv2UIWrapper* getUI (LV2UI_Write_Function writeFunction, LV2UI_Controller controller, LV2UI_Widget* widget,
+ const LV2_Feature* const* features, bool isExternal)
+ {
+ const MessageManagerLock mmLock;
+
+ if (ui != nullptr)
+ ui->resetIfNeeded (writeFunction, controller, widget, features);
+ else
+ ui = new JuceLv2UIWrapper (filter, writeFunction, controller, widget, features, isExternal);
+
+ return ui;
+ }
+#endif
+
+private:
+#if JUCE_LINUX
+ SharedResourcePointer<SharedMessageThread> msgThread;
+#else
+ SharedResourcePointer<ScopedJuceInitialiser_GUI> sharedJuceGUI;
+#endif
+
+ ScopedPointer<AudioProcessor> filter;
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ ScopedPointer<JuceLv2UIWrapper> ui;
+#endif
+ HeapBlock<float*> channels;
+ MidiBuffer midiEvents;
+ int numInChans, numOutChans;
+
+#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos)
+ LV2_Atom_Sequence* portEventsIn;
+#endif
+#if JucePlugin_ProducesMidiOutput
+ LV2_Atom_Sequence* portMidiOut;
+#endif
+ float* portFreewheel;
+#if JucePlugin_WantsLV2Latency
+ float* portLatency;
+#endif
+ float* portAudioIns[JucePlugin_MaxNumInputChannels];
+ float* portAudioOuts[JucePlugin_MaxNumOutputChannels];
+ Array<float*> portControls;
+
+ uint32 bufferSize;
+ double sampleRate;
+ Array<float> lastControlValues;
+ AudioPlayHead::CurrentPositionInfo curPosInfo;
+
+ struct Lv2PositionData {
+ int64_t bar;
+ float barBeat;
+ uint32_t beatUnit;
+ float beatsPerBar;
+ float beatsPerMinute;
+ int64_t frame;
+ double speed;
+ bool extraValid;
+
+ Lv2PositionData()
+ : bar(-1),
+ barBeat(-1.0f),
+ beatUnit(0),
+ beatsPerBar(0.0f),
+ beatsPerMinute(0.0f),
+ frame(-1),
+ speed(0.0),
+ extraValid(false) {}
+ };
+ Lv2PositionData lastPositionData;
+
+ const LV2_URID_Map* uridMap;
+ LV2_URID uridAtomBlank;
+ LV2_URID uridAtomObject;
+ LV2_URID uridAtomDouble;
+ LV2_URID uridAtomFloat;
+ LV2_URID uridAtomInt;
+ LV2_URID uridAtomLong;
+ LV2_URID uridAtomSequence;
+ LV2_URID uridMidiEvent;
+ LV2_URID uridTimePos;
+ LV2_URID uridTimeBar;
+ LV2_URID uridTimeBarBeat;
+ LV2_URID uridTimeBeatsPerBar; // timeSigNumerator
+ LV2_URID uridTimeBeatsPerMinute; // bpm
+ LV2_URID uridTimeBeatUnit; // timeSigDenominator
+ LV2_URID uridTimeFrame; // timeInSamples
+ LV2_URID uridTimeSpeed;
+
+ bool usingNominalBlockLength; // if false use maxBlockLength
+
+ LV2_Program_Descriptor progDesc;
+
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2Wrapper)
+};
+
+//==============================================================================
+// LV2 descriptor functions
+
+static LV2_Handle juceLV2_Instantiate (const LV2_Descriptor*, double sampleRate, const char*, const LV2_Feature* const* features)
+{
+ return new JuceLv2Wrapper (sampleRate, features);
+}
+
+#define handlePtr ((JuceLv2Wrapper*)handle)
+
+static void juceLV2_ConnectPort (LV2_Handle handle, uint32 port, void* dataLocation)
+{
+ handlePtr->lv2ConnectPort (port, dataLocation);
+}
+
+static void juceLV2_Activate (LV2_Handle handle)
+{
+ handlePtr->lv2Activate();
+}
+
+static void juceLV2_Run( LV2_Handle handle, uint32 sampleCount)
+{
+ handlePtr->lv2Run (sampleCount);
+}
+
+static void juceLV2_Deactivate (LV2_Handle handle)
+{
+ handlePtr->lv2Deactivate();
+}
+
+static void juceLV2_Cleanup (LV2_Handle handle)
+{
+ delete handlePtr;
+}
+
+//==============================================================================
+// LV2 extended functions
+
+static uint32_t juceLV2_getOptions (LV2_Handle handle, LV2_Options_Option* options)
+{
+ return handlePtr->lv2GetOptions(options);
+}
+
+static uint32_t juceLV2_setOptions (LV2_Handle handle, const LV2_Options_Option* options)
+{
+ return handlePtr->lv2SetOptions(options);
+}
+
+static const LV2_Program_Descriptor* juceLV2_getProgram (LV2_Handle handle, uint32_t index)
+{
+ return handlePtr->lv2GetProgram(index);
+}
+
+static void juceLV2_selectProgram (LV2_Handle handle, uint32_t bank, uint32_t program)
+{
+ handlePtr->lv2SelectProgram(bank, program);
+}
+
+static LV2_State_Status juceLV2_SaveState (LV2_Handle handle, LV2_State_Store_Function store, LV2_State_Handle stateHandle,
+ uint32_t, const LV2_Feature* const*)
+{
+ return handlePtr->lv2SaveState(store, stateHandle);
+}
+
+static LV2_State_Status juceLV2_RestoreState (LV2_Handle handle, LV2_State_Retrieve_Function retrieve, LV2_State_Handle stateHandle,
+ uint32_t flags, const LV2_Feature* const*)
+{
+ return handlePtr->lv2RestoreState(retrieve, stateHandle, flags);
+}
+
+#undef handlePtr
+
+static const void* juceLV2_ExtensionData (const char* uri)
+{
+ static const LV2_Options_Interface options = { juceLV2_getOptions, juceLV2_setOptions };
+ static const LV2_Programs_Interface programs = { juceLV2_getProgram, juceLV2_selectProgram };
+ static const LV2_State_Interface state = { juceLV2_SaveState, juceLV2_RestoreState };
+
+ if (strcmp(uri, LV2_OPTIONS__interface) == 0)
+ return &options;
+ if (strcmp(uri, LV2_PROGRAMS__Interface) == 0)
+ return &programs;
+ if (strcmp(uri, LV2_STATE__interface) == 0)
+ return &state;
+
+ return nullptr;
+}
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+//==============================================================================
+// LV2 UI descriptor functions
+
+static LV2UI_Handle juceLV2UI_Instantiate (LV2UI_Write_Function writeFunction, LV2UI_Controller controller,
+ LV2UI_Widget* widget, const LV2_Feature* const* features, bool isExternal)
+{
+ for (int i = 0; features[i] != nullptr; ++i)
+ {
+ if (strcmp(features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0 && features[i]->data != nullptr)
+ {
+ JuceLv2Wrapper* wrapper = (JuceLv2Wrapper*)features[i]->data;
+ return wrapper->getUI(writeFunction, controller, widget, features, isExternal);
+ }
+ }
+
+ std::cerr << "Host does not support instance-access, cannot use UI" << std::endl;
+ return nullptr;
+}
+
+static LV2UI_Handle juceLV2UI_InstantiateExternal (const LV2UI_Descriptor*, const char*, const char*, LV2UI_Write_Function writeFunction,
+ LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+{
+ return juceLV2UI_Instantiate(writeFunction, controller, widget, features, true);
+}
+
+static LV2UI_Handle juceLV2UI_InstantiateParent (const LV2UI_Descriptor*, const char*, const char*, LV2UI_Write_Function writeFunction,
+ LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features)
+{
+ return juceLV2UI_Instantiate(writeFunction, controller, widget, features, false);
+}
+
+static void juceLV2UI_Cleanup (LV2UI_Handle handle)
+{
+ ((JuceLv2UIWrapper*)handle)->lv2Cleanup();
+}
+#endif
+
+//==============================================================================
+// static LV2 Descriptor objects
+
+static const LV2_Descriptor JuceLv2Plugin = {
+ strdup(getPluginURI().toRawUTF8()),
+ juceLV2_Instantiate,
+ juceLV2_ConnectPort,
+ juceLV2_Activate,
+ juceLV2_Run,
+ juceLV2_Deactivate,
+ juceLV2_Cleanup,
+ juceLV2_ExtensionData
+};
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+static const LV2UI_Descriptor JuceLv2UI_External = {
+ strdup(String(getPluginURI() + "#ExternalUI").toRawUTF8()),
+ juceLV2UI_InstantiateExternal,
+ juceLV2UI_Cleanup,
+ nullptr,
+ nullptr
+};
+
+static const LV2UI_Descriptor JuceLv2UI_Parent = {
+ strdup(String(getPluginURI() + "#ParentUI").toRawUTF8()),
+ juceLV2UI_InstantiateParent,
+ juceLV2UI_Cleanup,
+ nullptr,
+ nullptr
+};
+#endif
+
+static const struct DescriptorCleanup {
+ DescriptorCleanup() {}
+ ~DescriptorCleanup()
+ {
+ free((void*)JuceLv2Plugin.URI);
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+ free((void*)JuceLv2UI_External.URI);
+ free((void*)JuceLv2UI_Parent.URI);
+#endif
+ }
+} _descCleanup;
+
+#if JUCE_WINDOWS
+ #define JUCE_EXPORTED_FUNCTION extern "C" __declspec (dllexport)
+#else
+ #define JUCE_EXPORTED_FUNCTION extern "C" __attribute__ ((visibility("default")))
+#endif
+
+//==============================================================================
+// startup code..
+
+JUCE_EXPORTED_FUNCTION void lv2_generate_ttl (const char* basename);
+JUCE_EXPORTED_FUNCTION void lv2_generate_ttl (const char* basename)
+{
+ createLv2Files (basename);
+}
+
+JUCE_EXPORTED_FUNCTION const LV2_Descriptor* lv2_descriptor (uint32 index);
+JUCE_EXPORTED_FUNCTION const LV2_Descriptor* lv2_descriptor (uint32 index)
+{
+ return (index == 0) ? &JuceLv2Plugin : nullptr;
+}
+
+#if ! JUCE_AUDIOPROCESSOR_NO_GUI
+JUCE_EXPORTED_FUNCTION const LV2UI_Descriptor* lv2ui_descriptor (uint32 index);
+JUCE_EXPORTED_FUNCTION const LV2UI_Descriptor* lv2ui_descriptor (uint32 index)
+{
+ switch (index)
+ {
+ case 0:
+ return &JuceLv2UI_External;
+ case 1:
+ return &JuceLv2UI_Parent;
+ default:
+ return nullptr;
+ }
+}
+#endif
+
+#endif
--- /dev/null
+/*\r
+ ==============================================================================\r
+\r
+ This file is part of the JUCE library.\r
+ Copyright (c) 2017 - ROLI Ltd.\r
+\r
+ JUCE is an open source library subject to commercial or open-source\r
+ licensing.\r
+\r
+ By using JUCE, you agree to the terms of both the JUCE 5 End-User License\r
+ Agreement and JUCE 5 Privacy Policy (both updated and effective as of the\r
+ 27th April 2017).\r
+\r
+ End User License Agreement: www.juce.com/juce-5-licence\r
+ Privacy Policy: www.juce.com/juce-5-privacy-policy\r
+\r
+ Or: You may also use this code under the terms of the GPL v3 (see\r
+ www.gnu.org/licenses).\r
+\r
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
+ DISCLAIMED.\r
+\r
+ ==============================================================================\r
+*/\r
+\r
+#include "LV2/juce_LV2_Wrapper.cpp"\r
--- /dev/null
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library.
+ Copyright (c) 2017 - ROLI Ltd.
+
+ JUCE is an open source library subject to commercial or open-source
+ licensing.
+
+ By using JUCE, you agree to the terms of both the JUCE 5 End-User License
+ Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
+ 27th April 2017).
+
+ End User License Agreement: www.juce.com/juce-5-licence
+ Privacy Policy: www.juce.com/juce-5-privacy-policy
+
+ Or: You may also use this code under the terms of the GPL v3 (see
+ www.gnu.org/licenses).
+
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
+ DISCLAIMED.
+
+ ==============================================================================
+*/
+
+/*
+ Copyright © 2019 IOhannes m zmölnig
+
+ Provide additional structs & enum-aliases, to allow compilation with JUCE-5.4.1
+
+ The names of the struct-members and enum-aliases have been derived by comparing
+ juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp of
+ both JUCE-5.3.2 and JUCE-5.4.1
+ */
+
+#define JUCE_VSTINTERFACE_H_INCLUDED
+
+using namespace juce;
+
+#if JUCE_MSVC
+ #define VSTINTERFACECALL __cdecl
+ #pragma pack(push)
+ #pragma pack(8)
+#elif JUCE_MAC || JUCE_IOS
+ #define VSTINTERFACECALL
+ #if JUCE_64BIT
+ #pragma options align=power
+ #else
+ #pragma options align=mac68k
+ #endif
+#else
+ #define VSTINTERFACECALL
+ #pragma pack(push, 8)
+#endif
+
+#define VSTCALLBACK VSTINTERFACECALL
+
+const int32 juceVstInterfaceVersion = 2400;
+#define kVstVersion 2400
+const int32 juceVstInterfaceIdentifier = 0x56737450; // The "magic" identifier in the SDK is 'VstP'.
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstEffectInterface
+{
+ int32 interfaceIdentifier;
+ pointer_sized_int (VSTINTERFACECALL* dispatchFunction) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);
+ void (VSTINTERFACECALL* processAudioFunction) (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples);
+ void (VSTINTERFACECALL* setParameterValueFunction) (VstEffectInterface*, int32 parameterIndex, float value);
+ float (VSTINTERFACECALL* getParameterValueFunction) (VstEffectInterface*, int32 parameterIndex);
+ int32 numPrograms;
+ int32 numParameters;
+ int32 numInputChannels;
+ int32 numOutputChannels;
+ int32 flags;
+ pointer_sized_int hostSpace1;
+ pointer_sized_int hostSpace2;
+ int32 latency;
+ int32 deprecated1;
+ int32 deprecated2;
+ float deprecated3;
+ void* effectPointer;
+ void* userPointer;
+ int32 plugInIdentifier;
+ int32 plugInVersion;
+ void (VSTINTERFACECALL* processAudioInplaceFunction) (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples);
+ void (VSTINTERFACECALL* processDoubleAudioInplaceFunction) (VstEffectInterface*, double** inputs, double** outputs, int32 numSamples);
+ char emptySpace[56];
+};
+
+struct AEffect;
+typedef pointer_sized_int (VSTINTERFACECALL*AEffectDispatcherProc)(AEffect*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);
+typedef void (VSTINTERFACECALL*AEffectProcessProc)(AEffect*, float** inputs, float** outputs, int32 numSamples);
+typedef void (VSTINTERFACECALL*AEffectProcessDoubleProc)(AEffect*, double** inputs, double** outputs, int32 numSamples);
+typedef float (VSTINTERFACECALL*AEffectGetParameterProc)(AEffect*, int32 parameterIndex);
+typedef void (VSTINTERFACECALL*AEffectSetParameterProc)(AEffect*, int32 parameterIndex, float value);
+
+struct AEffect
+{
+ int32 magic;
+ AEffectDispatcherProc dispatcher;
+ AEffectProcessProc process;
+ AEffectSetParameterProc setParameter;
+ AEffectGetParameterProc getParameter;
+ int32 numPrograms;
+ int32 numParams;
+ int32 numInputs;
+ int32 numOutputs;
+ int32 flags;
+ pointer_sized_int hostSpace1;
+ pointer_sized_int hostSpace2;
+ int32 initialDelay;
+ int32 deprecated1;
+ int32 deprecated2;
+ float deprecated3;
+ void* object;
+ void* userPointer;
+ int32 uniqueID;
+ int32 version;
+ AEffectProcessProc processReplacing;
+ AEffectProcessDoubleProc processDoubleReplacing;
+ char emptySpace[56];
+};
+
+
+typedef pointer_sized_int (VSTINTERFACECALL* VstHostCallback) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);
+typedef pointer_sized_int (VSTINTERFACECALL* audioMasterCallback) (AEffect*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);
+
+enum VstEffectInterfaceFlags
+{
+ vstEffectFlagHasEditor = 1,
+ vstEffectFlagInplaceAudio = 16,
+ vstEffectFlagDataInChunks = 32,
+ vstEffectFlagIsSynth = 256,
+ vstEffectFlagInplaceDoubleAudio = 4096
+
+ , effFlagsHasEditor = vstEffectFlagHasEditor
+ , effFlagsNoSoundInStop = 0 // FIXXME
+ , effFlagsProgramChunks = vstEffectFlagDataInChunks
+
+ , effFlagsCanReplacing = vstEffectFlagInplaceAudio
+ , effFlagsIsSynth = vstEffectFlagIsSynth
+ , effFlagsCanDoubleReplacing = vstEffectFlagInplaceDoubleAudio
+};
+
+//==============================================================================
+enum VstHostToPlugInOpcodes
+{
+ plugInOpcodeOpen,
+ plugInOpcodeClose,
+ plugInOpcodeSetCurrentProgram,
+ plugInOpcodeGetCurrentProgram,
+ plugInOpcodeSetCurrentProgramName,
+ plugInOpcodeGetCurrentProgramName,
+ plugInOpcodeGetParameterLabel,
+ plugInOpcodeGetParameterText,
+ plugInOpcodeGetParameterName,
+ plugInOpcodeSetSampleRate = plugInOpcodeGetParameterName + 2,
+ plugInOpcodeSetBlockSize,
+ plugInOpcodeResumeSuspend,
+ plugInOpcodeGetEditorBounds,
+ plugInOpcodeOpenEditor,
+ plugInOpcodeCloseEditor,
+ plugInOpcodeDrawEditor,
+ plugInOpcodeGetMouse,
+ plugInOpcodeEditorIdle = plugInOpcodeGetMouse + 2,
+ plugInOpcodeeffEditorTop,
+ plugInOpcodeSleepEditor,
+ plugInOpcodeIdentify,
+ plugInOpcodeGetData,
+ plugInOpcodeSetData,
+ plugInOpcodePreAudioProcessingEvents,
+ plugInOpcodeIsParameterAutomatable,
+ plugInOpcodeParameterValueForText,
+ plugInOpcodeGetProgramName = plugInOpcodeParameterValueForText + 2,
+ plugInOpcodeConnectInput = plugInOpcodeGetProgramName + 2,
+ plugInOpcodeConnectOutput,
+ plugInOpcodeGetInputPinProperties,
+ plugInOpcodeGetOutputPinProperties,
+ plugInOpcodeGetPlugInCategory,
+ plugInOpcodeSetSpeakerConfiguration = plugInOpcodeGetPlugInCategory + 7,
+ plugInOpcodeSetBypass = plugInOpcodeSetSpeakerConfiguration + 2,
+ plugInOpcodeGetPlugInName,
+ plugInOpcodeGetManufacturerName = plugInOpcodeGetPlugInName + 2,
+ plugInOpcodeGetManufacturerProductName,
+ plugInOpcodeGetManufacturerVersion,
+ plugInOpcodeManufacturerSpecific,
+ plugInOpcodeCanPlugInDo,
+ plugInOpcodeGetTailSize,
+ plugInOpcodeIdle,
+ plugInOpcodeKeyboardFocusRequired = plugInOpcodeIdle + 4,
+ plugInOpcodeGetVstInterfaceVersion,
+ plugInOpcodeGetCurrentMidiProgram = plugInOpcodeGetVstInterfaceVersion + 5,
+ plugInOpcodeGetSpeakerArrangement = plugInOpcodeGetCurrentMidiProgram + 6,
+ plugInOpcodeNextPlugInUniqueID,
+ plugInOpcodeStartProcess,
+ plugInOpcodeStopProcess,
+ plugInOpcodeSetNumberOfSamplesToProcess,
+ plugInOpcodeSetSampleFloatType = plugInOpcodeSetNumberOfSamplesToProcess + 4,
+ pluginOpcodeGetNumMidiInputChannels,
+ pluginOpcodeGetNumMidiOutputChannels,
+ plugInOpcodeMaximum = pluginOpcodeGetNumMidiOutputChannels
+
+ , effOpen = plugInOpcodeOpen
+ , effClose = plugInOpcodeClose
+ , effSetProgram = plugInOpcodeSetCurrentProgram
+ , effGetProgram = plugInOpcodeGetCurrentProgram
+ , effSetProgramName = plugInOpcodeSetCurrentProgramName
+ , effGetProgramName = plugInOpcodeGetCurrentProgramName
+ , effGetParamLabel = plugInOpcodeGetParameterLabel
+ , effGetParamDisplay = plugInOpcodeGetParameterText
+ , effGetParamName = plugInOpcodeGetParameterName
+ , effSetSampleRate = plugInOpcodeSetSampleRate
+ , effSetBlockSize = plugInOpcodeSetBlockSize
+ , effMainsChanged = plugInOpcodeResumeSuspend
+ , effEditGetRect = plugInOpcodeGetEditorBounds
+ , effEditOpen = plugInOpcodeOpenEditor
+ , effEditClose = plugInOpcodeCloseEditor
+ , effIdentify = plugInOpcodeIdentify
+ , effGetChunk = plugInOpcodeGetData
+ , effSetChunk = plugInOpcodeSetData
+ , effProcessEvents = plugInOpcodePreAudioProcessingEvents
+ , effCanBeAutomated = plugInOpcodeIsParameterAutomatable
+ , effString2Parameter = plugInOpcodeParameterValueForText
+ , effGetProgramNameIndexed = plugInOpcodeGetProgramName
+ , effGetInputProperties = plugInOpcodeGetInputPinProperties
+ , effGetOutputProperties = plugInOpcodeGetOutputPinProperties
+ , effGetPlugCategory = plugInOpcodeGetPlugInCategory
+ , effSetSpeakerArrangement = plugInOpcodeSetSpeakerConfiguration
+ , effSetBypass = plugInOpcodeSetBypass
+ , effGetEffectName = plugInOpcodeGetPlugInName
+ , effGetProductString = plugInOpcodeGetManufacturerProductName
+ , effGetVendorString = plugInOpcodeGetManufacturerName
+ , effGetVendorVersion = plugInOpcodeGetManufacturerVersion
+ , effVendorSpecific = plugInOpcodeManufacturerSpecific
+ , effCanDo = plugInOpcodeCanPlugInDo
+ , effGetTailSize = plugInOpcodeGetTailSize
+ , effKeysRequired = plugInOpcodeKeyboardFocusRequired
+ , effGetVstVersion = plugInOpcodeGetVstInterfaceVersion
+ , effGetCurrentMidiProgram = plugInOpcodeGetCurrentMidiProgram
+ , effGetSpeakerArrangement = plugInOpcodeGetSpeakerArrangement
+ , effSetTotalSampleToProcess = plugInOpcodeSetNumberOfSamplesToProcess
+ , effSetProcessPrecision = plugInOpcodeSetSampleFloatType
+ , effGetNumMidiInputChannels = pluginOpcodeGetNumMidiInputChannels
+ , effGetNumMidiOutputChannels = pluginOpcodeGetNumMidiOutputChannels
+
+ , effConnectInput = plugInOpcodeConnectInput
+ , effConnectOutput = plugInOpcodeConnectOutput
+ , effEditIdle = plugInOpcodeEditorIdle
+ , effIdle = plugInOpcodeIdle
+ , effShellGetNextPlugin = plugInOpcodeNextPlugInUniqueID
+ , effStartProcess = plugInOpcodeStartProcess
+ , effStopProcess = plugInOpcodeStopProcess
+};
+
+
+enum VstPlugInToHostOpcodes
+{
+ hostOpcodeParameterChanged,
+ hostOpcodeVstVersion,
+ hostOpcodeCurrentId,
+ hostOpcodeIdle,
+ hostOpcodePinConnected,
+ hostOpcodePlugInWantsMidi = hostOpcodePinConnected + 2,
+ hostOpcodeGetTimingInfo,
+ hostOpcodePreAudioProcessingEvents,
+ hostOpcodeSetTime,
+ hostOpcodeTempoAt,
+ hostOpcodeGetNumberOfAutomatableParameters,
+ hostOpcodeGetParameterInterval,
+ hostOpcodeIOModified,
+ hostOpcodeNeedsIdle,
+ hostOpcodeWindowSize,
+ hostOpcodeGetSampleRate,
+ hostOpcodeGetBlockSize,
+ hostOpcodeGetInputLatency,
+ hostOpcodeGetOutputLatency,
+ hostOpcodeGetPreviousPlugIn,
+ hostOpcodeGetNextPlugIn,
+ hostOpcodeWillReplace,
+ hostOpcodeGetCurrentAudioProcessingLevel,
+ hostOpcodeGetAutomationState,
+ hostOpcodeOfflineStart,
+ hostOpcodeOfflineReadSource,
+ hostOpcodeOfflineWrite,
+ hostOpcodeOfflineGetCurrentPass,
+ hostOpcodeOfflineGetCurrentMetaPass,
+ hostOpcodeSetOutputSampleRate,
+ hostOpcodeGetOutputSpeakerConfiguration,
+ hostOpcodeGetManufacturerName,
+ hostOpcodeGetProductName,
+ hostOpcodeGetManufacturerVersion,
+ hostOpcodeManufacturerSpecific,
+ hostOpcodeSetIcon,
+ hostOpcodeCanHostDo,
+ hostOpcodeGetLanguage,
+ hostOpcodeOpenEditorWindow,
+ hostOpcodeCloseEditorWindow,
+ hostOpcodeGetDirectory,
+ hostOpcodeUpdateView,
+ hostOpcodeParameterChangeGestureBegin,
+ hostOpcodeParameterChangeGestureEnd
+
+ , audioMasterProcessEvents = hostOpcodePreAudioProcessingEvents
+ , audioMasterWantMidi = hostOpcodePlugInWantsMidi
+ , audioMasterVendorSpecific = hostOpcodeManufacturerSpecific
+ , audioMasterAutomate = hostOpcodeParameterChanged
+ , audioMasterBeginEdit = hostOpcodeParameterChangeGestureBegin
+ , audioMasterEndEdit = hostOpcodeParameterChangeGestureEnd
+ , audioMasterUpdateDisplay = hostOpcodeUpdateView
+ , audioMasterIOChanged = hostOpcodeIOModified
+ , audioMasterCanDo = hostOpcodeCanHostDo
+ , audioMasterGetCurrentProcessLevel = hostOpcodeGetCurrentAudioProcessingLevel
+ , audioMasterGetTime = hostOpcodeGetTimingInfo
+ , audioMasterSizeWindow = hostOpcodeWindowSize
+ , audioMasterVersion = hostOpcodeVstVersion
+
+ , audioMasterCloseWindow = hostOpcodeCloseEditorWindow
+ , audioMasterCurrentId = hostOpcodeCurrentId
+ , audioMasterGetAutomationState = hostOpcodeGetAutomationState
+ , audioMasterGetBlockSize = hostOpcodeGetBlockSize
+ , audioMasterGetDirectory = hostOpcodeGetDirectory
+ , audioMasterGetInputLatency = hostOpcodeGetInputLatency
+ , audioMasterGetLanguage = hostOpcodeGetLanguage
+ , audioMasterGetNextPlug = hostOpcodeGetNextPlugIn
+ , audioMasterGetNumAutomatableParameters = hostOpcodeGetNumberOfAutomatableParameters
+ , audioMasterGetOutputLatency = hostOpcodeGetOutputLatency
+ , audioMasterGetOutputSpeakerArrangement = hostOpcodeGetOutputSpeakerConfiguration
+ , audioMasterGetParameterQuantization = hostOpcodeGetParameterInterval
+ , audioMasterGetPreviousPlug = hostOpcodeGetPreviousPlugIn
+ , audioMasterGetProductString = hostOpcodeGetProductName
+ , audioMasterGetSampleRate = hostOpcodeGetSampleRate
+ , audioMasterGetVendorString = hostOpcodeGetManufacturerName
+ , audioMasterGetVendorVersion = hostOpcodeGetManufacturerVersion
+ , audioMasterIdle = hostOpcodeIdle
+ , audioMasterNeedIdle = hostOpcodeNeedsIdle
+ , audioMasterOfflineGetCurrentMetaPass = hostOpcodeOfflineGetCurrentMetaPass
+ , audioMasterOfflineGetCurrentPass = hostOpcodeOfflineGetCurrentPass
+ , audioMasterOfflineRead = hostOpcodeOfflineReadSource
+ , audioMasterOfflineStart = hostOpcodeOfflineStart
+ , audioMasterOfflineWrite = hostOpcodeOfflineWrite
+ , audioMasterOpenWindow = hostOpcodeOpenEditorWindow
+ , audioMasterPinConnected = hostOpcodePinConnected
+ , audioMasterSetIcon = hostOpcodeSetIcon
+ , audioMasterSetOutputSampleRate = hostOpcodeSetOutputSampleRate
+ , audioMasterSetTime = hostOpcodeSetTime
+ , audioMasterTempoAt = hostOpcodeTempoAt
+ , audioMasterWillReplaceOrAccumulate = hostOpcodeWillReplace
+
+};
+
+//==============================================================================
+enum VstProcessingSampleType
+{
+ vstProcessingSampleTypeFloat,
+ vstProcessingSampleTypeDouble
+
+ , kVstProcessPrecision32 = vstProcessingSampleTypeFloat
+ , kVstProcessPrecision64 = vstProcessingSampleTypeDouble
+};
+
+//==============================================================================
+// These names must be identical to the Steinberg SDK so JUCE users can set
+// exactly what they want.
+typedef enum VstPlugInCategory
+{
+ kPlugCategUnknown,
+ kPlugCategEffect,
+ kPlugCategSynth,
+ kPlugCategAnalysis,
+ kPlugCategMastering,
+ kPlugCategSpacializer,
+ kPlugCategRoomFx,
+ kPlugSurroundFx,
+ kPlugCategRestoration,
+ kPlugCategOfflineProcess,
+ kPlugCategShell,
+ kPlugCategGenerator
+} VstPlugCategory;
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstEditorBounds
+{
+ int16 upper;
+ int16 leftmost;
+ int16 lower;
+ int16 rightmost;
+};
+struct ERect {
+ int16 top;
+ int16 left;
+ int16 bottom;
+ int16 right;
+};
+
+//==============================================================================
+enum VstMaxStringLengths
+{
+ vstMaxNameLength = 64,
+ vstMaxParameterOrPinLabelLength = 64,
+ vstMaxParameterOrPinShortLabelLength = 8,
+ vstMaxCategoryLength = 24,
+ vstMaxManufacturerStringLength = 64,
+ vstMaxPlugInNameStringLength = 64
+
+ , kVstMaxLabelLen = vstMaxParameterOrPinLabelLength
+ , kVstMaxShortLabelLen = vstMaxParameterOrPinShortLabelLength
+ , kVstMaxProductStrLen = vstMaxPlugInNameStringLength
+ , kVstMaxVendorStrLen = vstMaxManufacturerStringLength
+};
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstPinInfo
+{
+ char text[vstMaxParameterOrPinLabelLength];
+ int32 flags;
+ int32 configurationType;
+ char shortText[vstMaxParameterOrPinShortLabelLength];
+ char unused[48];
+};
+struct VstPinProperties
+{
+ char label[vstMaxParameterOrPinLabelLength];
+ int32 flags;
+ int32 arrangementType;
+ char shortLabel[vstMaxParameterOrPinShortLabelLength];
+ char unused[48];
+};
+
+enum VstPinInfoFlags
+{
+ vstPinInfoFlagIsActive = 1,
+ vstPinInfoFlagIsStereo = 2,
+ vstPinInfoFlagValid = 4
+
+ , kVstPinIsActive = vstPinInfoFlagIsActive
+ , kVstPinUseSpeaker = vstPinInfoFlagValid
+ , kVstPinIsStereo = vstPinInfoFlagIsStereo
+};
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstEvent
+{
+ int32 type;
+ int32 byteSize; // size;
+ int32 deltaFrames; //? sampleOffset;
+ int32 flags;
+ char content[16];
+};
+
+enum VstEventTypes
+{
+ vstMidiEventType = 1,
+ vstSysExEventType = 6,
+ kVstMidiType = vstMidiEventType,
+ kVstSysExType = vstSysExEventType
+};
+
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstEvents
+{
+ int32 numEvents;
+ pointer_sized_int future;
+ VstEvent* events[2];
+};
+
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstMidiEvent
+{
+ int32 type;
+ int32 byteSize; // size;
+ int32 deltaFrames; //? sampleOffset;
+ int32 flags;
+ int32 noteLength; // noteSampleLength;
+ int32 noteOffset; // noteSampleOffset;
+ char midiData[4];
+ char detune; // tuning;
+ char noteOffVelocity; // noteVelocityOff;
+ char future1;
+ char future2;
+};
+
+enum VstMidiEventFlags
+{
+ vstMidiEventIsRealtime = 1
+};
+
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstSysExEvent
+{
+ int32 type;
+ int32 byteSize; // size;
+ int32 deltaFrames; //? offsetSamples;
+ int32 flags;
+ int32 dumpBytes; // sysExDumpSize;
+ pointer_sized_int resvd1; // future1;
+ char* sysexDump; // sysExDump;
+ pointer_sized_int resvd2; // future2;
+};
+typedef VstSysExEvent VstMidiSysexEvent;
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstTimingInformation
+{
+ double samplePosition;
+ double sampleRate;
+ double systemTimeNanoseconds;
+ double musicalPosition;
+ double tempoBPM;
+ double lastBarPosition;
+ double loopStartPosition;
+ double loopEndPosition;
+ int32 timeSignatureNumerator;
+ int32 timeSignatureDenominator;
+ int32 smpteOffset;
+ int32 smpteRate;
+ int32 samplesToNearestClock;
+ int32 flags;
+};
+struct VstTimeInfo
+{
+ double samplePos;
+ double sampleRate;
+ double systemTimeNanoseconds;
+ double ppqPos;
+ double tempo;
+ double barStartPos;
+ double cycleStartPos;
+ double cycleEndPos;
+ int32 timeSigNumerator;
+ int32 timeSigDenominator;
+ int32 smpteOffset;
+ int32 smpteFrameRate;
+ int32 samplesToNearestClock;
+ int32 flags;
+};
+
+enum VstTimingInformationFlags
+{
+ vstTimingInfoFlagTransportChanged = 1,
+ vstTimingInfoFlagCurrentlyPlaying = 2,
+ vstTimingInfoFlagLoopActive = 4,
+ vstTimingInfoFlagCurrentlyRecording = 8,
+ vstTimingInfoFlagAutomationWriteModeActive = 64,
+ vstTimingInfoFlagAutomationReadModeActive = 128,
+ vstTimingInfoFlagNanosecondsValid = 256,
+ vstTimingInfoFlagMusicalPositionValid = 512,
+ vstTimingInfoFlagTempoValid = 1024,
+ vstTimingInfoFlagLastBarPositionValid = 2048,
+ vstTimingInfoFlagLoopPositionValid = 4096,
+ vstTimingInfoFlagTimeSignatureValid = 8192,
+ vstTimingInfoFlagSmpteValid = 16384,
+ vstTimingInfoFlagNearestClockValid = 32768
+
+ , kVstTransportPlaying = vstTimingInfoFlagCurrentlyPlaying
+ , kVstTransportCycleActive = vstTimingInfoFlagLoopActive
+ , kVstTransportRecording = vstTimingInfoFlagCurrentlyRecording
+ , kVstPpqPosValid = vstTimingInfoFlagMusicalPositionValid
+ , kVstTempoValid = vstTimingInfoFlagTempoValid
+ , kVstBarsValid = vstTimingInfoFlagLastBarPositionValid
+ , kVstCyclePosValid = vstTimingInfoFlagLoopPositionValid
+ , kVstTimeSigValid = vstTimingInfoFlagTimeSignatureValid
+ , kVstSmpteValid = vstTimingInfoFlagSmpteValid
+ , kVstClockValid = vstTimingInfoFlagNearestClockValid
+
+ , kVstAutomationReading = vstTimingInfoFlagAutomationReadModeActive
+ , kVstAutomationWriting = vstTimingInfoFlagAutomationWriteModeActive
+ , kVstNanosValid = vstTimingInfoFlagNanosecondsValid
+ , kVstTransportChanged = vstTimingInfoFlagTransportChanged
+};
+
+//==============================================================================
+enum VstSmpteRates
+{
+ vstSmpteRateFps24,
+ vstSmpteRateFps25,
+ vstSmpteRateFps2997,
+ vstSmpteRateFps30,
+ vstSmpteRateFps2997drop,
+ vstSmpteRateFps30drop,
+
+ vstSmpteRate16mmFilm,
+ vstSmpteRate35mmFilm,
+
+ vstSmpteRateFps239 = vstSmpteRate35mmFilm + 3,
+ vstSmpteRateFps249,
+ vstSmpteRateFps599,
+ vstSmpteRateFps60
+
+ , kVstSmpte239fps = vstSmpteRateFps239
+ , kVstSmpte24fps = vstSmpteRateFps24
+ , kVstSmpte25fps = vstSmpteRateFps25
+ , kVstSmpte2997fps = vstSmpteRateFps2997
+ , kVstSmpte30fps = vstSmpteRateFps30
+ , kVstSmpte2997dfps = vstSmpteRateFps2997drop
+ , kVstSmpte30dfps = vstSmpteRateFps30drop
+ , kVstSmpteFilm16mm = vstSmpteRate16mmFilm
+ , kVstSmpteFilm35mm = vstSmpteRate35mmFilm
+ , kVstSmpte249fps = vstSmpteRateFps249
+ , kVstSmpte599fps = vstSmpteRateFps599
+ , kVstSmpte60fps = vstSmpteRateFps60
+};
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstIndividualSpeakerInfo
+{
+ float azimuthalAngle;
+ float elevationAngle;
+ float radius;
+ float reserved;
+ char label[vstMaxNameLength];
+ int32 type;
+ char unused[28];
+};
+typedef VstIndividualSpeakerInfo VstSpeakerProperties;
+
+enum VstIndividualSpeakerType
+{
+ vstIndividualSpeakerTypeUndefined = 0x7fffffff,
+ vstIndividualSpeakerTypeMono = 0,
+ vstIndividualSpeakerTypeLeft,
+ vstIndividualSpeakerTypeRight,
+ vstIndividualSpeakerTypeCentre,
+ vstIndividualSpeakerTypeLFE,
+ vstIndividualSpeakerTypeLeftSurround,
+ vstIndividualSpeakerTypeRightSurround,
+ vstIndividualSpeakerTypeLeftCentre,
+ vstIndividualSpeakerTypeRightCentre,
+ vstIndividualSpeakerTypeSurround,
+ vstIndividualSpeakerTypeCentreSurround = vstIndividualSpeakerTypeSurround,
+ vstIndividualSpeakerTypeLeftRearSurround,
+ vstIndividualSpeakerTypeRightRearSurround,
+ vstIndividualSpeakerTypeTopMiddle,
+ vstIndividualSpeakerTypeTopFrontLeft,
+ vstIndividualSpeakerTypeTopFrontCentre,
+ vstIndividualSpeakerTypeTopFrontRight,
+ vstIndividualSpeakerTypeTopRearLeft,
+ vstIndividualSpeakerTypeTopRearCentre,
+ vstIndividualSpeakerTypeTopRearRight,
+ vstIndividualSpeakerTypeLFE2
+
+ , kSpeakerL = vstIndividualSpeakerTypeLeft
+ , kSpeakerR = vstIndividualSpeakerTypeRight
+ , kSpeakerC = vstIndividualSpeakerTypeCentre
+ , kSpeakerLfe = vstIndividualSpeakerTypeLFE
+ , kSpeakerLs = vstIndividualSpeakerTypeLeftSurround
+ , kSpeakerRs = vstIndividualSpeakerTypeRightSurround
+ , kSpeakerLc = vstIndividualSpeakerTypeLeftCentre
+ , kSpeakerRc = vstIndividualSpeakerTypeRightCentre
+ , kSpeakerS = vstIndividualSpeakerTypeSurround
+ , kSpeakerSl = vstIndividualSpeakerTypeLeftRearSurround
+ , kSpeakerSr = vstIndividualSpeakerTypeRightRearSurround
+ , kSpeakerTm = vstIndividualSpeakerTypeTopMiddle
+ , kSpeakerTfl = vstIndividualSpeakerTypeTopFrontLeft
+ , kSpeakerTfc = vstIndividualSpeakerTypeTopFrontCentre
+ , kSpeakerTfr = vstIndividualSpeakerTypeTopFrontRight
+ , kSpeakerTrl = vstIndividualSpeakerTypeTopRearLeft
+ , kSpeakerTrc = vstIndividualSpeakerTypeTopRearCentre
+ , kSpeakerTrr = vstIndividualSpeakerTypeTopRearRight
+ , kSpeakerLfe2 = vstIndividualSpeakerTypeLFE2
+};
+
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct VstSpeakerConfiguration
+{
+ int32 type;
+ int32 numChannels; // numberOfChannels;
+ VstIndividualSpeakerInfo speakers[8];
+};
+typedef VstSpeakerConfiguration VstSpeakerArrangement;
+
+enum VstSpeakerConfigurationType
+{
+ vstSpeakerConfigTypeUser = -2,
+ vstSpeakerConfigTypeEmpty = -1,
+ vstSpeakerConfigTypeMono = 0,
+ vstSpeakerConfigTypeLR,
+ vstSpeakerConfigTypeLsRs,
+ vstSpeakerConfigTypeLcRc,
+ vstSpeakerConfigTypeSlSr,
+ vstSpeakerConfigTypeCLfe,
+ vstSpeakerConfigTypeLRC,
+ vstSpeakerConfigTypeLRS,
+ vstSpeakerConfigTypeLRCLfe,
+ vstSpeakerConfigTypeLRLfeS,
+ vstSpeakerConfigTypeLRCS,
+ vstSpeakerConfigTypeLRLsRs,
+ vstSpeakerConfigTypeLRCLfeS,
+ vstSpeakerConfigTypeLRLfeLsRs,
+ vstSpeakerConfigTypeLRCLsRs,
+ vstSpeakerConfigTypeLRCLfeLsRs,
+ vstSpeakerConfigTypeLRCLsRsCs,
+ vstSpeakerConfigTypeLRLsRsSlSr,
+ vstSpeakerConfigTypeLRCLfeLsRsCs,
+ vstSpeakerConfigTypeLRLfeLsRsSlSr,
+ vstSpeakerConfigTypeLRCLsRsLcRc,
+ vstSpeakerConfigTypeLRCLsRsSlSr,
+ vstSpeakerConfigTypeLRCLfeLsRsLcRc,
+ vstSpeakerConfigTypeLRCLfeLsRsSlSr,
+ vstSpeakerConfigTypeLRCLsRsLcRcCs,
+ vstSpeakerConfigTypeLRCLsRsCsSlSr,
+ vstSpeakerConfigTypeLRCLfeLsRsLcRcCs,
+ vstSpeakerConfigTypeLRCLfeLsRsCsSlSr,
+ vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2
+
+ , kSpeakerArrMono = vstSpeakerConfigTypeMono
+ , kSpeakerArrStereo = vstSpeakerConfigTypeLR
+ , kSpeakerArrStereoCLfe = vstSpeakerConfigTypeCLfe
+ , kSpeakerArrStereoCenter = vstSpeakerConfigTypeLcRc
+ , kSpeakerArrStereoSide = vstSpeakerConfigTypeSlSr
+ , kSpeakerArrStereoSurround = vstSpeakerConfigTypeLsRs
+ , kSpeakerArr30Cine = vstSpeakerConfigTypeLRC
+ , kSpeakerArr31Cine = vstSpeakerConfigTypeLRCLfe
+ , kSpeakerArr40Cine = vstSpeakerConfigTypeLRCS
+ , kSpeakerArr41Cine = vstSpeakerConfigTypeLRCLfeS
+ , kSpeakerArr60Cine = vstSpeakerConfigTypeLRCLsRsCs
+ , kSpeakerArr61Cine = vstSpeakerConfigTypeLRCLfeLsRsCs
+ , kSpeakerArr70Cine = vstSpeakerConfigTypeLRCLsRsLcRc // create7point0SDDS
+ , kSpeakerArr71Cine = vstSpeakerConfigTypeLRCLfeLsRsLcRc
+ , kSpeakerArr80Cine = vstSpeakerConfigTypeLRCLsRsLcRcCs
+ , kSpeakerArr81Cine = vstSpeakerConfigTypeLRCLfeLsRsLcRcCs
+ , kSpeakerArr30Music = vstSpeakerConfigTypeLRS
+ , kSpeakerArr31Music = vstSpeakerConfigTypeLRLfeS
+ , kSpeakerArr40Music = vstSpeakerConfigTypeLRLsRs
+ , kSpeakerArr41Music = vstSpeakerConfigTypeLRLfeLsRs
+ , kSpeakerArr60Music = vstSpeakerConfigTypeLRLsRsSlSr
+ , kSpeakerArr61Music = vstSpeakerConfigTypeLRLfeLsRsSlSr
+ , kSpeakerArr70Music = vstSpeakerConfigTypeLRCLsRsSlSr // create7point0
+ , kSpeakerArr71Music = vstSpeakerConfigTypeLRCLfeLsRsSlSr
+ , kSpeakerArr80Music = vstSpeakerConfigTypeLRCLsRsCsSlSr
+ , kSpeakerArr81Music = vstSpeakerConfigTypeLRCLfeLsRsCsSlSr
+ , kSpeakerArr50 = vstSpeakerConfigTypeLRCLsRs
+ , kSpeakerArr51 = vstSpeakerConfigTypeLRCLfeLsRs
+ , kSpeakerArr102 = vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2
+ , kSpeakerArrEmpty = vstSpeakerConfigTypeEmpty
+ , kSpeakerArrUserDefined = vstSpeakerConfigTypeUser
+};
+
+#if JUCE_BIG_ENDIAN
+ #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (a | (((uint32) b) << 8) | (((uint32) c) << 16) | (((uint32) d) << 24))
+#else
+ #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (d | (((uint32) c) << 8) | (((uint32) b) << 16) | (((uint32) a) << 24))
+#endif
+
+enum PresonusExtensionConstants
+{
+ presonusVendorID = JUCE_MULTICHAR_CONSTANT ('P', 'r', 'e', 'S'),
+ presonusSetContentScaleFactor = JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's')
+};
+
+//==============================================================================
+/** Structure used for VSTs
+
+ @tags{Audio}
+*/
+struct vst2FxBank
+{
+ int32 magic1;
+ int32 size;
+ int32 magic2;
+ int32 version1;
+ int32 fxID;
+ int32 version2;
+ int32 elements;
+ int32 current;
+ char shouldBeZero[124];
+ int32 chunkSize;
+ char chunk[1];
+};
+
+#if JUCE_MSVC
+ #pragma pack(pop)
+#elif JUCE_MAC || JUCE_IOS
+ #pragma options align=reset
+#else
+ #pragma pack(pop)
+#endif
--- /dev/null
+#!/usr/bin/makefile -f
+
+all: build
+
+build: lv2_ttl_generator
+mingw: lv2_ttl_generator.exe
+
+lv2_ttl_generator: lv2_ttl_generator.c
+ $(CXX) lv2_ttl_generator.c -o lv2_ttl_generator -ldl
+
+lv2_ttl_generator.exe: lv2_ttl_generator.c
+ $(CXX) lv2_ttl_generator.c -o lv2_ttl_generator.exe -static
+ touch lv2_ttl_generator
+
+clean:
+ rm -f lv2_ttl_generator lv2_ttl_generator.exe
--- /dev/null
+#!/bin/sh
+
+#set -e
+#echo "Please run this script from the _bin folder"
+
+error() {
+ echo "$@" 1>&2
+}
+
+SCRIPTPATH=$(cd ${0%/*}; pwd)
+
+if [ -f ${SCRIPTPATH}/lv2_ttl_generator.exe ]; then
+ GEN=${SCRIPTPATH}/lv2_ttl_generator.exe
+ EXT=dll
+else
+ GEN=${SCRIPTPATH}/lv2_ttl_generator
+ EXT=so
+fi
+if [ ! -x "${GEN}" ]; then
+ error "unable to find lv2_ttl_generator"
+ exit 1
+fi
+
+SEARCHPATH=$1
+if [ "x${SEARCHPATH}" = "x" ]; then
+ if [ -d "lv2" ]; then
+ SEARCHPATH="lv2"
+ fi
+ if [ ! -d "${SEARCHPATH}" ]; then
+ SEARCHPATH=.
+ fi
+fi
+if [ ! -d "${SEARCHPATH}" ]; then
+ error "cannot search plugins in non-existing directory ${SEARCHPATH}"
+ exit 1
+fi
+
+
+find ${SEARCHPATH} -type d -name "*.lv2" -exec /bin/sh -c "cd {}; ${GEN} ./*.${EXT}" \;
+
--- /dev/null
+/*
+ * JUCE LV2 *.ttl generator
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef _WIN32
+ #include <windows.h>
+ #define TTL_GENERATOR_WINDOWS
+#else
+ #include <dlfcn.h>
+#endif
+
+#ifndef nullptr
+ #define nullptr (0)
+#endif
+
+typedef void (*TTL_Generator_Function)(const char* basename);
+
+int main(int argc, char* argv[])
+{
+ if (argc != 2)
+ {
+ printf("usage: %s /path/to/plugin-DLL\n", argv[0]);
+ return 1;
+ }
+
+#ifdef TTL_GENERATOR_WINDOWS
+ const HMODULE handle = LoadLibraryA(argv[1]);
+#else
+ void* const handle = dlopen(argv[1], RTLD_LAZY);
+#endif
+
+ if (! handle)
+ {
+#ifdef TTL_GENERATOR_WINDOWS
+ printf("Failed to open plugin DLL\n");
+#else
+ printf("Failed to open plugin DLL, error was:\n%s\n", dlerror());
+#endif
+ return 2;
+ }
+
+#ifdef TTL_GENERATOR_WINDOWS
+ const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl");
+#else
+ const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl");
+#endif
+
+ if (ttlFn != NULL)
+ {
+ char basename[strlen(argv[1])+1];
+
+#ifdef TTL_GENERATOR_WINDOWS
+ if (char* base2 = strrchr(argv[1], '\\'))
+#else
+ if (char* base2 = strrchr(argv[1], '/'))
+#endif
+ {
+ strcpy(basename, base2+1);
+ basename[strrchr(base2, '.')-base2-1] = '\0';
+ }
+ else
+ strcpy(basename, argv[1]);
+
+ printf("Generate ttl data for '%s', basename: '%s'\n", argv[1], basename);
+
+ ttlFn(basename);
+ }
+ else
+ printf("Failed to find 'lv2_generate_ttl' function\n");
+
+#ifdef TTL_GENERATOR_WINDOWS
+ FreeLibrary(handle);
+#else
+ dlclose(handle);
+#endif
+
+ return 0;
+}
--- /dev/null
+this lv2_ttl_generator is taken from DISTRHO by Filipe Coelho (aka 'falkTX')
+
+http://distrho.sourceforge.net
+https://github.com/falkTX/DISTRHO
+
+
+this small tool creates the needed .ttl files out of the plug-in binaries (.so) for the .lv2 bundle
--- /dev/null
+# Configuration file for git-buildpackage and friends
+
+[DEFAULT]
+pristine-tar = True
+sign-tags = True
+compression = xz
--- /dev/null
+#!/bin/sh
+
+## script to initialize a cloned repository
+## with per (local) repository settings.
+
+# - ignore quilt's .pc/ directory
+# - enable the "--follow-tags" mode for pushing
+
+echo "tuning git-repository for ${NAME}"
+git config push.followTags true && echo "enabled push.followTags"
+
+GITEXCLUDE=".git/info/exclude"
+egrep "^/?\.pc/?$" "${GITEXCLUDE}" >/dev/null 2>&1 \
+ || (echo "/.pc/" >> "${GITEXCLUDE}" && echo "ignoring /.pc/")
--- /dev/null
+BREAKING-CHANGES.txt
--- /dev/null
+modules/* /usr/share/juce/modules
+debian/extra/juce_audio_plugin_client/* /usr/share/juce/modules/juce_audio_plugin_client/
+debian/extra/juce_audio_processors/format_types/juce_VSTInterface.h /usr/share/juce/modules/juce_audio_processors/format_types/
--- /dev/null
+extras/Projucer/Builds/LinuxMakefile/build/Projucer usr/bin
+debian/artifacts/juce.png usr/share/pixmaps/
+debian/Projucer.desktop usr/share/applications/
+usr/lib
--- /dev/null
+debian/artifacts/Projucer.1
--- /dev/null
+application/x-juce; Projucer '%s'; edit=Projucer '%s'; test=test "$DISPLAY" != ""; priority=2
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="application/x-juce">
+ <sub-class-of type="text/xml"/>
+ <comment>JUCE project</comment>
+ <glob pattern="*.jucer"/>
+ </mime-type>
+</mime-info>
--- /dev/null
+Document: libjuce-doc
+Title: JUCE - reference manual
+Author: Julian Storer / ROLI Ltd.
+Abstract: This is the API documentation for JUCE (Jules' Utility Class
+ Extensions), an all-encompassing C++ framework for developing cross-platform
+ software (with a special focus on GUI, graphics and sound)
+Section: Programming
+
+Format: HTML
+Index: /usr/share/doc/juce-modules-source/apiref/index.html
+Files: /usr/share/doc/juce-modules-source/apiref/*.html
+
--- /dev/null
+doxygen/doc/* /usr/share/doc/juce-modules-source/apiref
--- /dev/null
+From: Filipe Coelho <falkTX>
+Date: Sat, 10 Feb 2018 00:00:00 +0100
+Subject: LV2 fixes for autiodprocessor
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Origin: https://github.com/DISTRHO/juce/tree/9f6cdc3659df13169285464ee1d13ef14357f833
+Reviewed-by: IOhannes m zmölnig
+---
+ .../juce_audio_processors/processors/juce_AudioProcessor.h | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- juce.orig/modules/juce_audio_processors/processors/juce_AudioProcessor.h
++++ juce/modules/juce_audio_processors/processors/juce_AudioProcessor.h
+@@ -927,6 +927,7 @@
+ */\r
+ virtual void setNonRealtime (bool isNonRealtime) noexcept;\r
+ \r
++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI\r
+ //==============================================================================\r
+ /** Creates the processor's GUI.\r
+ \r
+@@ -973,6 +974,7 @@
+ This may call createEditor() internally to create the component.\r
+ */\r
+ AudioProcessorEditor* createEditorIfNeeded();\r
++ #endif\r
+ \r
+ //==============================================================================\r
+ /** Returns the default number of steps for a parameter.\r
+@@ -1108,6 +1110,11 @@
+ virtual void processorLayoutsChanged();\r
+ \r
+ //==============================================================================\r
++ /** LV2 specific calls, saving/restore as string. */\r
++ virtual String getStateInformationString () { return String(); }\r
++ virtual void setStateInformationString (const String&) {}\r
++\r
++ //==============================================================================\r
+ /** Adds a listener that will be called when an aspect of this processor changes. */\r
+ virtual void addListener (AudioProcessorListener* newListener);\r
+ \r
+@@ -1177,9 +1184,11 @@
+ \r
+ virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return {}; }\r
+ \r
++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI\r
+ //==============================================================================\r
+ /** Not for public use - this is called before deleting an editor component. */\r
+ void editorBeingDeleted (AudioProcessorEditor*) noexcept;\r
++ #endif\r
+ \r
+ /** Flags to indicate the type of plugin context in which a processor is being used. */\r
+ enum WrapperType\r
+@@ -1193,6 +1202,7 @@
+ wrapperType_AAX,\r
+ wrapperType_Standalone,\r
+ wrapperType_Unity\r
++ , wrapperType_LV2\r
+ };\r
+ \r
+ /** When loaded by a plugin wrapper, this flag will be set to indicate the type\r
+@@ -1453,7 +1463,9 @@
+ \r
+ //==============================================================================\r
+ Array<AudioProcessorListener*> listeners;\r
++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI\r
+ Component::SafePointer<AudioProcessorEditor> activeEditor;\r
++ #endif\r
+ double currentSampleRate = 0;\r
+ int blockSize = 0, latencySamples = 0;\r
+ bool suspended = false, nonRealtime = false;\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Sun, 11 Feb 2018 00:00:00 +0100
+Subject: clamp a few defines to fixed values
+
+ on Debian we only ever allow using the system provided libraries
+ (zlib, flac, oggvorbis,...)
+Origin: Debian
+Forwarded: not-needed
+---
+ .../utility/juce_CheckSettingMacros.h | 25 +++++++++++++++++
+ modules/juce_core/juce_core.h | 32 +++++++++++++++++++++-
+ 2 files changed, 56 insertions(+), 1 deletion(-)
+
+--- juce.orig/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h
++++ juce/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h
+@@ -24,6 +24,30 @@
+ ==============================================================================\r
+ */\r
+ \r
++/* Debian specific overrides */\r
++#if JucePlugin_Build_LV2 && ! defined (JucePlugin_LV2URI)\r
++# warning JUCE/Debian using default LV2URI\r
++# define JucePlugin_LV2URI JucePlugin_Name\r
++#endif\r
++\r
++#if JucePlugin_Build_AU\r
++# warning JUCE/Debian disabled AU support\r
++# undef JucePlugin_Build_AU\r
++# define JucePlugin_Build_AU 0\r
++#endif\r
++\r
++#if JucePlugin_Build_RTAS\r
++# warning JUCE/Debian disabled RTAS support\r
++# undef JucePlugin_Build_RTAS\r
++# define JucePlugin_Build_RTAS 0\r
++#endif\r
++\r
++#if JucePlugin_Build_AAX\r
++# warning JUCE/Debian disabled AAX support\r
++# undef JucePlugin_Build_AAX\r
++# define JucePlugin_Build_AAX 0\r
++#endif\r
++\r
+ // The following checks should cause a compile error if you've forgotten to\r
+ // define all your plugin settings properly..\r
+ \r
+@@ -40,6 +64,7 @@
+ #endif\r
+ #define JUCE_CHECKSETTINGMACROS_H\r
+ \r
++\r
+ #ifndef JucePlugin_IsSynth\r
+ #error "You need to define the JucePlugin_IsSynth value!"\r
+ #endif\r
+--- juce.orig/modules/juce_core/juce_core.h
++++ juce/modules/juce_core/juce_core.h
+@@ -64,6 +64,36 @@
+ \r
+ #include "system/juce_TargetPlatform.h"\r
+ \r
++/** Debian specific constants\r
++ - Debian, we don't use embedded libraries\r
++*/\r
++#ifdef JUCE_INCLUDE_ZLIB_CODE\r
++# undef JUCE_INCLUDE_ZLIB_CODE\r
++#endif\r
++#define JUCE_INCLUDE_ZLIB_CODE 0\r
++\r
++#ifdef JUCE_INCLUDE_FLAC_CODE\r
++# undef JUCE_INCLUDE_FLAC_CODE\r
++#endif\r
++#define JUCE_INCLUDE_FLAC_CODE 0\r
++\r
++#ifdef JUCE_INCLUDE_OGGVORBIS_CODE\r
++# undef JUCE_INCLUDE_OGGVORBIS_CODE\r
++#endif\r
++#define JUCE_INCLUDE_OGGVORBIS_CODE 0\r
++\r
++#ifdef JUCE_INCLUDE_JPEGLIB_CODE\r
++# undef JUCE_INCLUDE_JPEGLIB_CODE\r
++#endif\r
++#define JUCE_INCLUDE_JPEGLIB_CODE 0\r
++\r
++#ifdef JUCE_INCLUDE_PNGLIB_CODE\r
++# undef JUCE_INCLUDE_PNGLIB_CODE\r
++#endif\r
++#define JUCE_INCLUDE_PNGLIB_CODE 0\r
++/** Debian specifics END\r
++*/\r
++\r
+ //==============================================================================\r
+ /** Config: JUCE_FORCE_DEBUG\r
+ \r
+@@ -123,7 +153,7 @@
+ specify the path where your zlib headers live.\r
+ */\r
+ #ifndef JUCE_INCLUDE_ZLIB_CODE\r
+- #define JUCE_INCLUDE_ZLIB_CODE 1\r
++ #define JUCE_INCLUDE_ZLIB_CODE 0\r
+ #endif\r
+ \r
+ #ifndef JUCE_ZLIB_INCLUDE_PATH\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Thu, 9 Nov 2017 00:00:00 +0100
+Subject: Build GPL-3 variant of Projucer
+
+Forwarded: not-needed
+---
+ extras/Projucer/JuceLibraryCode/AppConfig.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- juce.orig/extras/Projucer/JuceLibraryCode/AppConfig.h
++++ juce/extras/Projucer/JuceLibraryCode/AppConfig.h
+@@ -32,7 +32,7 @@
+ // BEGIN SECTION A\r
+ \r
+ #ifndef JUCER_ENABLE_GPL_MODE\r
+- #define JUCER_ENABLE_GPL_MODE 0\r
++ #define JUCER_ENABLE_GPL_MODE 1\r
+ #endif\r
+ \r
+ // END SECTION A\r
--- /dev/null
+Description: have Projucer link against the system libraries
+ since the Debian package has removed 3rd-party libraries (jpeg, png, flag,
+ ogg/vorbis), we must use against the system libraries.
+Author: IOhannes m zmölnig
+Origin: Debian
+Forwarded: no
+Last-Update: 2019-08-21
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- juce.orig/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
++++ juce/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
+@@ -464,6 +464,39 @@
+ if (isCurlEnabled() && ! isLoadCurlSymbolsLazilyEnabled())\r
+ packages.add ("libcurl");\r
+ \r
++ // on Debian, a number of 3rd-party libs have been stripped away,\r
++ // so we need to link to the system libraries\r
++ if (project.getEnabledModules().isModuleEnabled ("juce_core"))\r
++ {\r
++ packages.add ("zlib");\r
++ }\r
++ if (project.getEnabledModules().isModuleEnabled ("juce_graphics"))\r
++ {\r
++ packages.add ("libjpeg");\r
++ packages.add ("libpng");\r
++ }\r
++ if (project.getEnabledModules().isModuleEnabled ("juce_audio_formats"))\r
++ {\r
++ if(project.isConfigFlagEnabled ("JUCE_USE_FLAC", true))\r
++ {\r
++ packages.add ("flac");\r
++ }\r
++\r
++ if(project.isConfigFlagEnabled ("JUCE_USE_OGGVORBIS", true))\r
++ {\r
++ packages.add ("vorbis");\r
++ packages.add ("vorbisfile");\r
++ packages.add ("vorbisenc");\r
++ packages.add ("ogg");\r
++ }\r
++ }\r
++ if (project.getEnabledModules().isModuleEnabled ("juce_audio_devices"))\r
++ {\r
++ if(project.isConfigFlagEnabled ("JUCE_JACK", true))\r
++ {\r
++ packages.add ("jack");\r
++ }\r
++ }\r
+ packages.removeDuplicates (false);\r
+ \r
+ return packages;\r
+@@ -563,6 +596,9 @@
+ StringArray result (linuxLibs);\r
+ \r
+ auto libraries = StringArray::fromTokens (getExternalLibrariesString(), ";", "\"'");\r
++#ifdef DEBIAN_JUCERPROJECT_LIBS\r
++ libraries.addArray(StringArray::fromTokens (DEBIAN_JUCERPROJECT_LIBS, ";", "\"'"));\r
++#endif\r
+ libraries.removeEmptyStrings();\r
+ \r
+ for (auto& lib : libraries)\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Thu, 9 Nov 2017 00:00:00 +0100
+Subject: prevent Projucer from checking for updates
+
+ The check-for-updates only makes sense for user-installed Projucer, not for
+ the Debian packaged version.
+Forwarded: not-needed
+---
+ extras/Projucer/Source/Application/jucer_AutoUpdater.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- juce.orig/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp
++++ juce/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp
+@@ -42,6 +42,7 @@
+ \r
+ void LatestVersionCheckerAndUpdater::checkForNewVersion (bool showAlerts)\r
+ {\r
++ return; // DONT check for new versions on Debian\r
+ if (! isThreadRunning())\r
+ {\r
+ showAlertWindows = showAlerts;\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Mon, 26 Mar 2018 00:00:00 +0200
+Subject: default to not-sending usage-data to ROLI
+
+ we prefer to have privacy enabled by default...
+Forwarded: no
+---
+ .../Application/Windows/jucer_ApplicationUsageDataWindowComponent.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- juce.orig/extras/Projucer/Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h
++++ juce/extras/Projucer/Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h
+@@ -69,10 +69,10 @@
+ \r
+ auto* controller = ProjucerApplication::getApp().licenseController.get();\r
+ \r
+- if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::disabled)\r
+- shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification);\r
+- else\r
++ if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::enabled)\r
+ shareApplicationUsageDataToggle->setToggleState (true, dontSendNotification);\r
++ else\r
++ shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification);\r
+ \r
+ addAndMakeVisible (shareApplicationUsageDataLabel);\r
+ shareApplicationUsageDataLabel.setFont (Font (14.0f));\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Sat, 10 Feb 2018 00:00:00 +0100
+Subject: use Python3 rather than Python2
+
+ for building the documentation
+Forwarded: no
+---
+ doxygen/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- juce.orig/doxygen/Makefile
++++ juce/doxygen/Makefile
+@@ -8,7 +8,7 @@
+ doxygen
+
+ build/juce_modules.dox: process_source_files.py $(SOURCE_FILES)
+- python $< ../modules build
++ python3 $< ../modules build
+
+ clean:
+ rm -rf build doc
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Tue, 19 Dec 2017 00:00:00 +0100
+Subject: default JUCE-module path for Projucer
+
+ On Debian we have the module-sources installed in /usr/share/juce/modules
+ and should use those if possible.
+Forwarded: not-needed
+---
+ extras/Projucer/Source/Settings/jucer_StoredSettings.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- juce.orig/extras/Projucer/Source/Settings/jucer_StoredSettings.cpp
++++ juce/extras/Projucer/Source/Settings/jucer_StoredSettings.cpp
+@@ -385,7 +385,7 @@
+ }\r
+ else if (key == Ids::defaultJuceModulePath)\r
+ {\r
+- return (os == TargetOS::windows ? "C:\\JUCE\\modules" : "~/JUCE/modules");\r
++ return (os == TargetOS::windows ? "C:\\JUCE\\modules" : "/usr/share/juce/modules");\r
+ }\r
+ else if (key == Ids::defaultUserModulePath)\r
+ {\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Wed, 11 Apr 2018 00:00:00 +0200
+Subject: Use global paths for JUCE modules in UnitTests
+
+Forwarded: not-needed
+---
+ extras/UnitTestRunner/UnitTestRunner.jucer | 38 +++++++++++++++---------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+--- juce.orig/extras/UnitTestRunner/UnitTestRunner.jucer
++++ juce/extras/UnitTestRunner/UnitTestRunner.jucer
+@@ -123,26 +123,26 @@
+ </VS2019>\r
+ </EXPORTFORMATS>\r
+ <MODULES>\r
+- <MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
+- <MODULES id="juce_audio_basics" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_audio_devices" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_audio_formats" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_audio_processors" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
+- <MODULE id="juce_blocks_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
+- <MODULES id="juce_core" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_cryptography" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_data_structures" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
+- <MODULES id="juce_events" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_graphics" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_gui_basics" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_gui_extra" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_opengl" showAllCode="1" useLocalCopy="0"/>\r
+- <MODULES id="juce_osc" showAllCode="1" useLocalCopy="0"/>\r
++ <MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_audio_processors" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULE id="juce_blocks_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_core" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_cryptography" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_data_structures" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_events" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++ <MODULES id="juce_osc" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+ <MODULE id="juce_product_unlocking" showAllCode="1" useLocalCopy="0"\r
+- useGlobalPath="0"/>\r
+- <MODULES id="juce_video" showAllCode="1" useLocalCopy="0"/>\r
++ useGlobalPath="1"/>\r
++ <MODULES id="juce_video" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+ </MODULES>\r
+ <JUCEOPTIONS JUCE_STRICT_REFCOUNTEDPOINTER="1"/>\r
+ <LIVE_SETTINGS>\r
--- /dev/null
+Description: provide missing VST2 replacement header
+ backprted from the original JUCE-5.3.1 header
+Author: IOhannes m zmölnig
+Last-Update: 2019-01-12
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- juce.orig/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
++++ juce/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+@@ -101,8 +101,7 @@
+ // field in the Projucer. The VST2 SDK can be obtained from the\r
+ // vstsdk3610_11_06_2018_build_37 (or older) VST3 SDK or JUCE version 5.3.2. You\r
+ // also need a VST2 license from Steinberg to distribute VST2 plug-ins.\r
+-#include "pluginterfaces/vst2.x/aeffect.h"\r
+-#include "pluginterfaces/vst2.x/aeffectx.h"\r
++#include "../../juce_audio_processors/format_types/juce_VSTInterface.h"\r
+ }\r
+ \r
+ using namespace juce;\r
+@@ -124,7 +123,6 @@
+ #pragma pack (push, 8)\r
+ #endif\r
+ \r
+-#define JUCE_VSTINTERFACE_H_INCLUDED 1\r
+ \r
+ #include "../utility/juce_IncludeModuleHeaders.h"\r
+ #include "../utility/juce_FakeMouseMoveGenerator.h"\r
+--- juce.orig/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
++++ juce/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
+@@ -49,7 +49,6 @@
+ #endif\r
+ \r
+ #define VST_FORCE_DEPRECATED 0\r
+-#define JUCE_VSTINTERFACE_H_INCLUDED 1\r
+ \r
+ namespace Vst2\r
+ {\r
+@@ -58,8 +57,7 @@
+ // paths or use the "VST (Legacy) SDK Folder" field in the Projucer. The VST2\r
+ // SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or older) VST3\r
+ // SDK or JUCE version 5.3.2.\r
+-#include <pluginterfaces/vst2.x/aeffect.h>\r
+-#include <pluginterfaces/vst2.x/aeffectx.h>\r
++#include "../../juce_audio_processors/format_types/juce_VSTInterface.h"\r
+ }\r
+ \r
+ #include "juce_VSTCommon.h"\r
+@@ -81,6 +79,9 @@
+ \r
+ #include "juce_VSTMidiEventList.h"\r
+ \r
++#define resvd2 hostSpace2\r
++#define nanoSeconds systemTimeNanoseconds\r
++\r
+ #if JUCE_MINGW\r
+ #ifndef WM_APPCOMMAND\r
+ #define WM_APPCOMMAND 0x0319\r
--- /dev/null
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
+Date: Thu, 12 Apr 2018 00:00:00 +0200
+Subject: meaningful default JACK client name
+
+ rather than "JUCEJack" for all jack standalone apps,
+ use the <JucePlugin_Name>.
+
+Bug: https://github.com/WeAreROLI/JUCE/issues/331
+Forwarded: https://github.com/WeAreROLI/JUCE/pull/351
+---
+ modules/juce_audio_devices/native/juce_linux_JackAudio.cpp | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- juce.orig/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp
++++ juce/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp
+@@ -105,7 +105,11 @@
+ \r
+ //==============================================================================\r
+ #ifndef JUCE_JACK_CLIENT_NAME\r
+- #define JUCE_JACK_CLIENT_NAME "JUCEJack"\r
++ #ifdef JucePlugin_Name\r
++ # define JUCE_JACK_CLIENT_NAME JucePlugin_Name\r
++ #else\r
++ # define JUCE_JACK_CLIENT_NAME "JUCEJack"\r
++ #endif\r
+ #endif\r
+ \r
+ struct JackPortIterator\r
--- /dev/null
+jack-client-name.patch
+LV2-audioprocessor.patch
+debian_fixed-defines.patch
+debian_gpl_variant.patch
+debian_no-update-check.patch
+debian_no-usagedata.patch
+debian_system_modules.patch
+debian_python3.patch
+debian_unittests_globalpaths.patch
+debian_vst.patch
+debian_link_systemlibs.patch
+spelling.patch
--- /dev/null
+Description: fixed spelling mistakes
+Author: IOhannes m zmölnig
+Forwarded: no
+Last-Update: 2019-01-12
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- juce.orig/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
++++ juce/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
+@@ -453,7 +453,7 @@
+ \r
+ props.add (new TextPropertyComponent (subprojectsValue, "Xcode Subprojects", 8192, true),\r
+ "Paths to Xcode projects that should be added to the build (one per line). "\r
+- "The names of the required build products can be specified after a colon, comma seperated, "\r
++ "The names of the required build products can be specified after a colon, comma separated, "\r
+ "e.g. \"path/to/MySubProject.xcodeproj: MySubProject, OtherTarget\". "\r
+ "If no build products are specified, all build products associated with a subproject will be added.");\r
+ \r
--- /dev/null
+#!/usr/bin/make -f
+# -*- mode: makefile; coding: utf-8 -*-
+# Copyright © 2015 IOhannes m zmölnig <umlaeute@debian.org>
+# Description: Main Debian packaging script for JUCE
+
+## export dummy TARGET_ARCH that doesn't do much,
+## but disables "-march=native" optimization
+export TARGET_ARCH=-Wl,--as-needed
+
+DEB_SRCDIR=extras/Projucer/Builds/LinuxMakefile
+DEBIAN_BUILD_ARTIFACTS = debian/artifacts
+
+DEB_COPYRIGHT_CHECK_IGNORE_REGEX = \
+ \.git/.*|debian/.*|.*\.gif|.*\.jpg|.*\.JPG|.*\.png|.*\.ico|.*\.icns|.*\.wav|.*\.caf|.*\.ogg|.*\.mp3|.*\.pdf|.*\.keystore|.*\.nib|.*/gradle-wrapper\.jar|.*\.zip
+
+
+#DEB_COPYRIGHT_CHECK_IGNORE_REGEX = \
+#^((.*\.jpg)|(.*\.JPG)|(.*\.gif)|(.*\.png)|(.*\.ico)|(.*\.icns)|(gradle-wrapper\.jar)|(.*\.mp3)|(.*\.caf)|(.*\.nib)|examples/InAppPurchase/Signing/InAppPurchase\.keystore|examples/(InAppPurchase/BinaryData/(Robot|Ed|Jules|JB|Fabian|Lukasz)[012]\.ogg|AUv3Synth|PlugInSamples/MultiOutSynth)/Source/BinaryData/singing\.ogg|examples/Demo/Resources/cello\.wav|examples/Demo/Resources/icons\.zip|modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinResources\.rsr|examples/ComponentTutorialExample/Introduction to Components - Part 1\.pdf|debian/(changelog|copyright(|_hints|_newhints)))$
+
+LDFLAGS += $(shell pkg-config --libs libjpeg libpng zlib)
+
+# JUCE uses some c++11 features requiring atomic_store_8 and
+# atomic_load_8, so we need to link with libatomic on
+# armel, powerpc, powerpcspe, m68k, mips, mipsel, sh4, ...
+# see also:
+# - https://gcc.gnu.org/wiki/Atomic
+# - https://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary
+# - the 'clasp' packaging
+noatomicarch = $(shell dpkg-architecture -qDEB_HOST_ARCH | egrep -x "(armel|armhf|powerpc|powerpcspe|m68k|mips|mipsel|sh4|riscv64)")
+# link with libatomic on architectures without built-in atomic
+ifeq ($(if $(noatomicarch),atomic), atomic)
+ LDFLAGS += -latomic
+ CPPFLAGS += -DDEBIAN_JUCERPROJECT_LIBS='\"atomic\"'
+endif
+
+%:
+ dh $@
+
+override_dh_auto_build-arch:
+ cp $(CURDIR)/examples/DemoRunner/Builds/iOS/DemoRunner/Images.xcassets/AppIcon.appiconset/Icon.png \
+ $(DEBIAN_BUILD_ARTIFACTS)/juce.png
+ dh_auto_build -D $(DEB_SRCDIR) -- \
+ V=1 \
+ LDFLAGS="$(LDFLAGS)" \
+ CPPFLAGS="$(CPPFLAGS)" \
+ $(empty)
+ make -C debian/extra/lv2-ttl-generator/
+ help2man -N \
+ --version-string="Projucer $(DEB_UPSTREAM_VERSION)" \
+ -n "the JUCE project-management tool" \
+ debian/scripts/Projucer-help2man \
+ > $(DEBIAN_BUILD_ARTIFACTS)/Projucer.1
+
+override_dh_auto_build-indep:
+ make -C doxygen
+
+override_dh_auto_install-arch:
+ install -d debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/juce/lv2-ttl-generator
+ install debian/extra/lv2-ttl-generator/lv2_ttl_generator debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/juce/lv2-ttl-generator/lv2_ttl_generator
+ install debian/extra/lv2-ttl-generator/generate-ttl.sh debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/juce/lv2-ttl-generator/generate-ttl.sh
+
+override_dh_auto_install-indep:
+ -dh_doxygen doxygen/doc/
+
+override_dh_install-indep:
+ dh_install --indep -X.tag
+ -find $(CURDIR)/debian/juce-modules-source/usr/share/juce \
+ -type f -executable \
+ '(' -name "*.h" -or -name "*.cpp" ')' \
+ -exec chmod -c 0644 {} +
+
+override_dh_installchangelogs:
+ dh_installchangelogs ChangeList.txt
+
+override_dh_clean:
+ dh_clean
+ make -C doxygen/ clean
+ make -C debian/extra/lv2-ttl-generator/ clean
+ rm -rf build $(DEB_SRCDIR)/build
+ rm -f $(DEBIAN_BUILD_ARTIFACTS)/*
+
+
+licensecheck:
+ licensecheck -i "^\./($(DEB_COPYRIGHT_CHECK_IGNORE_REGEX))$$" --deb-machine -r . \
+ > debian/copyright_newhints
+ cmp debian/copyright_hints debian/copyright_newhints \
+ && rm debian/copyright_newhints
--- /dev/null
+#!/bin/sh
+PROJUCER=$(pwd)/extras/Projucer/Builds/Linux/build/Projucer
+LIBJUCE_PATH=$(pwd)/debian/libbuilder/build
+
+if [ -d "${LIBJUCE_PATH}" ]; then
+ LD_LIBRARY_PATH=${LIBJUCE_PATH}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
+ export LD_LIBRARY_PATH
+fi
+
+#PROJUCER=Projucer
+
+case "$1" in
+ -h|--help)
+ #${PROJUCER} -h 2>/dev/null | sed -e 's|^ Projucer --| --|'
+ cat <<EOL
+Usage: Projucer [--help] [options]
+
+The Projucer is JUCE's own software project management workbench.
+It provides a Graphical User Interface to create your own JUCE based projects,
+and allows you to create various build systems (Makefiles, XCode projects,
+Visual Studio Projects,...).
+
+Generic Options:
+
+ --help
+ get a list of available cmdline arguments
+EOL
+ ;;
+ -v|-V|--version)
+ #${PROJUCER} -h
+cat <<EOL
+JUCE
+Copyright © ROLI Ltd.
+EOL
+ ;;
+ *)
+ ;;
+esac
--- /dev/null
+3.0 (quilt)
--- /dev/null
+Tests: juce-unit-tests
+Depends: @, @builddeps@,
+ libjack-dev,
+ libogg-dev,
+ xvfb, xauth,
+Restrictions: allow-stderr
--- /dev/null
+#!/bin/sh
+set -e
+
+
+dpkg-source --before-build `pwd`
+PCDEPS="jack flac vorbis vorbisenc vorbisfile ogg libjpeg libpng zlib"
+
+# resave the project with the system module-paths
+xvfb-run -a Projucer --resave extras/UnitTestRunner/UnitTestRunner.jucer
+# build the UnitTests
+make -C extras/UnitTestRunner/Builds/LinuxMakefile \
+ CFLAGS="$(pkg-config --cflags ${PCDEPS})" \
+ LDFLAGS="$(pkg-config --libs ${PCDEPS})" \
+ CONFIG=Release \
+ V=1
+# run the UnitTests
+./extras/UnitTestRunner/Builds/LinuxMakefile/build/UnitTestRunner
--- /dev/null
+# Run the "uscan" command to check for upstream updates and more.
+version=3
+opts=dversionmangle=s/[~+](dfsg|repack|ds)(\.?[0-9]*)?$// \
+ https://github.com/julianstorer/JUCE/releases .*/v?(\d\S*)\.tar\.gz