Previously, activateBus would fail if the new BusesLayout wasn't supported, as reported by isBusesLayoutSupported. However, according to the VST3 docs, a host is allowed to enable and disable buses in any combination, and the plugin should be able to handle this gracefully. The ability to enable/disable individual buses without failure is particularly important because there's no VST3 API to set a complete bus layout in one go. That is, the only way to set all buses active or all buses inactive is to set the appropriate state on each bus individually, which in turn means that at some point, some buses will be active and some will be inactive. Disallowing such 'intermediate' states may prevent the host from putting the plugin into other (valid) states. To ensure that the VST3 wrapper always accepts activateBus calls, it now keeps track of the activation state of each bus as requested by the host. When the host tries to change the activation state, the wrapper will try to set the host's "ideal" bus layout on the AudioProcessor. If this fails, the AudioProcessor will retain its previous bus layout. The buffer remapping inside the process callback has been made more robust, to handle cases where the host and the AudioProcessor disagree about the activation state of each bus: For input buses: - If the host has activated the bus, but the AudioProcessor decided to keep the bus inactive, the host's input will be ignored. - If the host deactivated the bus, but the AudioProcessor wanted to keep the bus active, the AudioProcessor will be provided with silence on that bus. For output buses: - If the host has activated the bus, but the AudioProcessor decided to keep the bus inactive, the wrapper will clear the host's output bus buffers. - If the host deactivated the bus, but the AudioProcessor wanted to keep the bus active, the AudioProcessor's output on that bus will be ignored. The AudioBuffer passed to the wrapped AudioProcessor will no longer contain any pointers from the host's ProcessData. Instead, the host's inputs will be copied (in JUCE channel order) to a temporary buffer, and this temporary buffer will be passed to AudioProcessor::processBlock. After processBlock, the buffer contents will be copied to the host's output buffers. This change is intended to avoid a potential issue when reordering channels into JUCE order, which may necessitate copying a host input channel to a different host output channel. In the case that the host is using the same buffers for both inputs and outputs, copying an input to an output channel may end up overwriting another input channel, breaking the plugin's inputs. |
||
|---|---|---|
| .github | ||
| docs | ||
| examples | ||
| extras | ||
| modules | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| BREAKING-CHANGES.txt | ||
| ChangeList.txt | ||
| CMakeLists.txt | ||
| LICENSE.md | ||
| README.md | ||
JUCE is an open-source cross-platform C++ application framework for creating high quality desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins. JUCE can be easily integrated with existing projects via CMake, or can be used as a project generation tool via the Projucer, which supports exporting projects for Xcode (macOS and iOS), Visual Studio, Android Studio, Code::Blocks and Linux Makefiles as well as containing a source code editor.
Getting Started
The JUCE repository contains a master and develop branch. The develop branch contains the latest bugfixes and features and is periodically merged into the master branch in stable tagged releases (the latest release containing pre-built binaries can be also downloaded from the JUCE website).
JUCE projects can be managed with either the Projucer (JUCE's own project-configuration tool) or with CMake.
The Projucer
The repository doesn't contain a pre-built Projucer so you will need to build it for your platform - Xcode, Visual Studio and Linux Makefile projects are located in extras/Projucer/Builds (the minimum system requirements are listed in the System Requirements section below). The Projucer can then be used to create new JUCE projects, view tutorials and run examples. It is also possible to include the JUCE modules source code in an existing project directly, or build them into a static or dynamic library which can be linked into a project.
For further help getting started, please refer to the JUCE documentation and tutorials.
CMake
Version 3.15 or higher is required. To use CMake, you will need to install it, either from your system package manager or from the official download page. For comprehensive documentation on JUCE's CMake API, see the JUCE CMake documentation. For examples which may be useful as starting points for new CMake projects, see the CMake examples directory.
Building Examples
To use CMake to build the examples and extras bundled with JUCE, simply clone JUCE and then run the following commands, replacing "DemoRunner" with the name of the target you wish to build.
cd /path/to/JUCE
cmake . -B cmake-build -DJUCE_BUILD_EXAMPLES=ON -DJUCE_BUILD_EXTRAS=ON
cmake --build cmake-build --target DemoRunner
Minimum System Requirements
Building JUCE Projects
- macOS/iOS: Xcode 9.2 (macOS 10.12.6)
- Windows: Windows 8.1 and Visual Studio 2015 Update 3 64-bit
- Linux: g++ 5.0 or Clang 3.4 (for a full list of dependencies, see here).
- Android: Android Studio on Windows, macOS or Linux
Deployment Targets
- macOS: macOS 10.7
- Windows: Windows Vista
- Linux: Mainstream Linux distributions
- iOS: iOS 9.0
- Android: Jelly Bean (API 16)
Contributing
Please see our contribution guidelines.
License
The core JUCE modules (juce_audio_basics, juce_audio_devices, juce_core and juce_events) are permissively licensed under the terms of the ISC license. Other modules are covered by a GPL/Commercial license.
There are multiple commercial licensing tiers for JUCE, with different terms for each:
- JUCE Personal (developers or startup businesses with revenue under 50K USD) - free
- JUCE Indie (small businesses with revenue under 500K USD) - $40/month
- JUCE Pro (no revenue limit) - $130/month
- JUCE Educational (no revenue limit) - free for bona fide educational institutes
For full terms see LICENSE.md.
