1.0.2562
This release includes a major rewrite of how the application discovers audio and midi devices, removing the dependency on JUCE. The library and application builds of Cmajor do not use JUCE, although the project is capable of generating a JUCE project as an export target.
The Cmajor plugin is however a JUCE project. If building from source, the plugin is not built by default, and the -DBULD_PLUGIN=ON
option must be specified to cmake. If the plugin is being built, a path to JUCE must be specified using -DJUCE_DIR=...
option
General code tidy up
We have found that some uses of the library with stricter warnings enabled lead to warnings about unreachable statements, and issues around const char *
conventions for string literals. We've resolved these issues, and updated our build settings to catch regressions in this area in future.
Drop binaryen support
The codebase had two ways of generating web assembly - via the LLVM backend, or using a custom web assembly generator. The LLVM backend produced superior code, but there were concerns the library would be too large to support Cmajor JIT in the browser. We have now completed this work, and determined that the LLVM backend is suitable for browser based compilation, and so have removed the custom web assembly generator.
Various CLAP export changes
The CLAP exporter now defaults to using a webview for the patch worker. In addition, the exporter now uses bigobj
on windows platforms.
Updates for the default GUI to support non-linear parameter scaling
Parameters can now specify a mid
value in their annotations. This specifies the value of the parameter in the central position of the knob. The default knob value is now scaled in a power series so that it passes through the mid value at the middle of it's travel. If no mid
value is specified, the knob defaults ot the previous linear behaviour.
Changed type rules around wrap<> and clamp<> types
Previously, wrap
and clamp
types could not automatically converted to float
, unlike int
. This lead to some confusion when migrating algorithms from int
to wrap
. This change will mean some situations where previously an explicit cast was required is no longer needed.
Bug Fixes
Resolved a problem with the new audio interface failing to update the sample rate correctly
Resolved a problem where certain data types were not being correctly transformed into and out of the runtime. This mainly affected the C++ translation (JUCE plugin builds for example). Issues were fixed related to bool
vectors with the JIT backend, and with void
events with web assembly.
Solved a problem where output midi events were not being correctly timestamped when running with large block sizes within a plugin context.