This project contains the full source code for the free rack extension CVA-7 for Reason, the music DAW produced by Reason Studios. Check the CVA-7 website for more details.
-
The source code is released following Reason Studios decision to open up the Rack Extension SDK platform allowing for this kind of project to be made publicly available
-
It is mostly meant as an example of a fully functional RE and the code is sparsely documented. I have since used C++ more intensively (in Jamba and other VST plugins) and would probably make very different implementation decisions now, especially being more familiar with "modern" C++.
-
The master branch is currently unreleased as the code has been updated to use re-cmake and RE SDK 4.2.0 but there are no new features. The advantage is that it is much easier to build and can be build on both macOS and Windows10.
- This project requires CMake (minimum version 3.13) properly installed (
cmake
executable must be in yourPATH
) - This project currently expects RE SDK 4.2.0 or 4.1.0 to be installed on the machine (it will not download it for you)
- Due to the RE SDK requirements, this project also requires python 3 to be installed
- It has been tested on macOS 10.14.6 with Xcode 9 installed
- It has been tested on Windows 10 with Visual Studio 16 2019 build tools
Design
contains the Pixelmator files used to create the graphicsGUI2D
is a standard RE SDK folder which contains the images (png format) as well asdevice_2D.lua
andhdgui_2D.lua
files which defines the UIResources
is a standard RE SDK folder which contains the strings (English only) displayed in the UIsrc/cpp
contains the C++ source code for the deviceinfo.lua
,motherboard_def.lua
andrealtime_controller.lua
are standard RE SDK files for defining the devicedisplay.lua
is the standard SDK file which contains the lua code for the UI (various custom displays)configure.py
is the python script you use to configure the CMake build
-
Because this device was originally created for SDK 2.2, it only uses C++11 (but be aware that it is a limited (by the SDK) version of C++11). The re-common framework it depends on uses C++17.
-
In order to render the waveform of the CV signal in the UI, the implementation uses 256 properties to pass the necessary information from RT to UI. It uses a
PendingUpdates
class to limit the amount of changes per batch. RT owned strings were introduced in SDK 2.5 in order to handle this kind of use case (which would translate into 1 RT owned string property instead of 256 individual properties) and is most likely a much better design. -
The class
Motherboard
models themotherboard_def.lua
from a C++ point of view -
The properties use a property manager (
IJBoxPropertyManager
) which automatically processes theiPropertyDiffs
provided on each batch to update the properties. -
The
Device
class represents the entry point and is the class that is theprivateState
in the C-styleJBox_Export_RenderRealtime
api. It contains 2 copies of theDeviceState
class: one being the state from the previous batch and one the state for the current batch. At the end of the batch, the current state is copied into the previous state. This allow to see if values have changed and respond appropriately. This design inspired the first iteration of the Jamba framework (VST) but with refinement it then led to having the Property (aka Parameters in VST world) themselves hold the previous and current values which I now believe is a better design. I may retrofit this design in a future implementation...
You can install the SDK wherever you want on your system and provide it as an argument to the configure.py
script. Or you can install (or create a link) in a default location:
/Users/Shared/ReasonStudios/JukeboxSDK_<RE_SDK_VERSION>/SDK
for macOSC:/Users/Public/Documents/ReasonStudios/JukeboxSDK_<RE_SDK_VERSION>/SDK
for Windows
Also note that the RE2DRender
program needs to be unzipped and is expected to be a sibling of SDK
(can be changed as well).
Invoking the configure.py
creates a build
directory in the directory where the command is run. Although it is strongly recommended to run this command outside the source tree, the build
directory is excluded in .gitignore
and since everything is contained within the build
folder it is easy to clean after the fact.
Running the python3 configure.py -h
command will print the usage.
Depending on how
python
is installed on your system you may have to invoke it differently.
This script is expecting the
cmake
command line tool to be in the path (usecmake -version
to confirm it is properly installed).
If you have setup the RE SDK in its default location, as specified above, simply run python3 configure.py
otherwise use the -p
option to specify its location.
After running the configure script, simply go into the newly generated build
folder and run re.sh install
(resp. re.bat install
). This will build the plugin and install it in its default location.
Simply run
re.sh -h
(resp.re.bat -h
) for help with the command
This script is expecting the
cmake
command line tool to be in the path (usecmake -version
to confirm it is properly installed).
You can then open Recon and load the newly built CVA-7
rack extension (you will find it under Utilities | pongasoft | CVA-7 CV Analyzer
)
The plugin will only appear in Recon not Reason
If you want to change the code, run a debugger, etc... you can check the instructions for the re-blank-plugin which explain how to generate an XCode project, load it in an IDE, etc...
- Upgraded to use re-cmake (removed all unnecessary files and added CMake build files)
- Upgraded to use RE SDK 4.2.0
- Builds properly on Apple chipset
- Fixed old code taken from a wip branch (display was broken)
- Use re-common 3.0.0 (simplify property creation with mini string library / printf)
- Fixed image sizes to work in Recon and future versions of Reason (fix for filmstrip images not being multiple of 5)
- First release.
-
This project is released under the terms of the Apache 2.0 license
-
This project uses the Rack extension SDK released under the Rack Extension License agreement