Releases: pongasoft/jamba
Release list
Version 4.0.0
This release contains a lot of big changes. Although I tried my best to be backward compatible there may be a few changes that might be breaking.
-
Build requirements: Jamba now requires C++17 and Visual Studio Build Tools 2019 (for Windows) (note that XCode 9.2 remains the requirement for macOS)
-
Major GUI parameter refactoring:
- Introduced
IGUIParameterand typed hierarchy (ITGUIParameter<T>) as the base of all GUI parameters - Introduced
GUIOptionalParamto handle Vst, Jmb or no parameter in a consistent fashion - Introduced the concept of discrete parameter (
IGUIParameter::asDiscreteParameter(int32 iStepCount)) to convert (if possible) any parameter
into a discrete parameter (which is a parameter backed by anint32with a given number of steps) - Refactored most views to use the new optional and discrete parameter concepts, thus making them way more flexible
- Changed
MomentaryButtonViewandToggleButtonViewto use discrete parameter concept (thus allowing other types thanbool) and allowing
to override the value of the steps representing on and off. - Changed
SwitchViewContainerto use discrete parameter concept, thus allowing to use any Vst or Jmb parameter that is
(or can be interpreted as) a discrete parameter.
- Introduced
-
Major renaming: introduced
ParamAware(formerlyGUIParamCxAware) andStateAware(formerlyPluginAccessor) (added deprecation warnings for old names) and related. -
Jmb GUI parameters no longer needed to be explicitly added to
GUIState(similar to Vst parameters) -
Added
IDiscreteConverter<T>concept for Jmb parameters to be able to convert a Jmb parameter to a discrete parameter -
Added
ParamDisplayViewto display the value of any parameter (Vst or Jmb) -
Added
DebugParamDisplayViewto display and highlight the value of a parameter (very useful during development) -
Added
ListAttributeto handle attributes backed by a list of values (for example enumeration)// Example (from StepButtonView.h) registerListAttribute<EArrowDirection>("arrow-direction", &StepButtonView::getArrowDirection, &StepButtonView::setArrowDirection, { {"auto", EArrowDirection::kAuto}, {"up", EArrowDirection::kUp}, {"right", EArrowDirection::kRight}, {"down", EArrowDirection::kDown}, {"left", EArrowDirection::kLeft} } -
Simplified parameter initialization by allowing to use initializer list and added more generic
DiscreteTypeParamConverter:// Example: with DiscreteTypeParamConverter, no need to specify size in advance. Also note the // use of the initializer list to initialize it. fEnumClassVst = vst<DiscreteTypeParamConverter<EEnumClass>>(EJambaTestPluginParamID::kEnumClassVst, STR16("EnumClassVst"), { {EEnumClass::kEnumClass0, STR16("kEC0 (vst)")}, {EEnumClass::kEnumClass1, STR16("kEC1 (vst)")}, {EEnumClass::kEnumClass2, STR16("kEC2 (vst)")}, {EEnumClass::kEnumClass3, STR16("kEC3 (vst)")}, }) .add(); -
Added
jamba-test-pluginto the Jamba project as a unit test/development plugin for Jamba (demonstrates ALL available views) -
Added
test.shto conveniently run the jamba tests (which are declared byjamba-test-plugin) from the command line -
Added
test_jambatarget to run the jamba tests from the IDE -
Added 2 different sets of UUIDs in blank plugin to handle Debug vs Release deployments
WARNING
The following changes are potentially breaking changes
- Changed the way Jamba handles parameter registration:
- Introduced
ICustomViewLifecyclewhich is now used instead ofGUIParamCxAware(inCustomViewFactory) - The default behavior is now to call
ParamAware::unregisterAll()followed byParamAware::registerParameters() - The consequence is that the
registerParametersmethod that you implement in your view is much simpler because
it does not have to handle previously registered parameters (which was not trivial to keep an accurate track of) - Allow multiple registrations per paramID. Prior to this release, registering multiple callbacks per paramID
resulted in only the last one registered being called. Now all of them will be called.
- Introduced
StepButtonViewandDiscreteButtonViewnow use discrete values only (no longerdouble). Check the documentation on how to use it instead (ex: an increment of0.1can be converted to an increment of1with a step count of10).- Changed
TagIDto be an unsigned int (ParamIDakauint32) - Changed default template type for
DiscreteValueParamConverterto be anint32 - Although care has been taken with renaming/adding deprecation warnings for old names, there is a chance (mostly with templated parameters) that it may impact compilation.
Version 3.2.4
- fixed blank plugin
initializeAPI to match superclass
Version 3.2.3
- Implemented #6: added cmake targets
build_vst3,test_vst3,install_vst3,install_vst2,build_auandinstall_au - This change allows those targets to be used directly in an IDE and for example use them for debugging (ex: attach a DAW executable to
install_vst2orinstall_vst3) - Modified
jamba.shandjamba.batto use the new cmake targets (making the scripts more generic) - Added ability to customize (extend or completely override) the following targets:
build_vst3by setting an optionalBUILD_VST3_TARGETvariabletest_vst3by setting an optionalTEST_VST3_TARGETvariablebuild_auby setting an optionalBUILD_AU_TARGETvariable
Version 3.2.2
- released Jamba website with Quickstart section to make it very easy to generate a blank plugin (answer a few questions in the browser)
- added (optional) VST3 SDK automatic download to the blank plugin (web and command line)
- fixed blank plugin creation issue when no company was provided
Version 3.2.1
- fixed
jamba.shscript to handle filename with white spaces and install audio unit before validation (validation tool unfortunately works from an installed component, not a file...)
Version 3.2.0
- added audio unit validation to
jamba.shscript (jamba.sh validate-au) which runs theauvaltoolutility on the audio unit plugin - added switch container view to handle tab like switching (check
Views::SwitchContainerView) - added (optional) image for text buttons (
Views::TextButtonView) - added (optional) disabled state for momentary buttons (
Views::MomentaryButtonView) - added discrete button view (a button which is "on" only when the backing discrete parameter matches the
stepvalue). This button can be used for radio groups, tabs, etc... (checkViews::DiscreteButtonView)
WARNING
The following changes are potentially breaking changes
- There is a small potentially breaking API change with function
Views::createCustomView(defined inViews/CustomViewCreator.h). Check commit. The function takes an additional 2 parameters which can be safely ignored if you don't need them.
Version 3.1.0
- added ability to conveniently register a global key hook (check
Views::registerGlobalKeyboardHook) - parameters now copy the provided strings (title, short tile and units) so that they no longer have to be static and for example can be computed
- added convenient methods to
AudioBuffersandChannel(copyFromandforEachSample). Definedconstand nonconstversions. - added Step Button view which is a button that increment/decrement a parameter by a fixed amount when clicked. Another amount (tied to shift click) can be provided.
Version 3.0.2
Version 3.0.1
- Use shallow cloning to avoid downloading the (unused) project history
Version 3.0.0
-
This is a major release with many changes (a few breaking APIs)
-
Added
TextViewButtonon which you can register aonClickListeneror implementonClick. Also handles disabled state. -
Added
ScrollbarViewwhich implements a scrollbar tied to 2 parameters (offset and zoom) -
Added
CustomControllerto implement a custom controller tied into Jamba (access to Vst/Jmb parameters and state) -
Added ability to easily switch to a new view (
GUIController::switchToView) -
Added
GUIJmbParameter::updateIfto update the value in place when necessary -
Added callback APIs to
GUIParamCxAwareregisterCallback<bool>(fParams->fMyParam, [this] (GUIVstParam<bool> &iParam) { flushCache(); }); -
Added registering callbacks and parameters on a view without inheriting from it (can be used from controllers
verifyViewmethod):auto button = dynamic_cast<Views::TextButtonView *>(iView); if(button) { auto callback = [] (Views::TextButtonView *iButton, GUIJmbParam<SampleData> &iParam) { iButton->setMouseEnabled(iParam->hasUndoHistory()); }; fState->registerConnectionFor(button) ->registerCallback<SampleData>(fState->fSampleData, std::move(callback), true); } -
Added optional arguments to
Parameters::vst<>()(resp.Parameters::jmb<>()) that get passed through the converter (resp. serializer) allowing syntax likefPlayModeHold = vst<BooleanParamConverter>(1201, // param ID STR16("Play Mode"), // param title STR16("Trigger"), STR16("Hold")) // BooleanParamConverter args -
Requires C++14
-
Added
EnumParamConverterfor Vst parameters backed by an enum -
Added
Rangeconcept -
Refactored
CustomViewCreatorcode to simplify writing individual attributes. IntroducedMarginAttribute,RangeAttribute, andGradientAttribute
WARNING
The following changes are potentially breaking changes
-
Refactored
Lerpclass to deal with type parameters differently (TFloatfor math precision,Xfor type of x,Yfor type of y). IntroducedSPLerp(single precision) andDPLerp(double precision) as well as several convenient methods. Example:// this will interpolate (SP=single precision) // X -> the time (long) from the range [0, fFadeDuration] // Y -> to the alpha (uint8_t) range [255, 0] (opaque -> transparent) // Note that although X and Y types are integer flavors, the interpolation will use floats // and the value returned will be cast to uint8_t fColor.alpha = Utils::mapValueSPXY<long, uint8_t>(iTime, 0, fFadeDuration, 255, 0); -
GUIParamCxAware(which is the class used for registering parameters) has been simplified withregisterParammethods (when the type is known). -
Moved
PluginAccessorinto its own header file -
Removed
CustomViewInitializer