Skip to content

Releases: cmajor-lang/cmajor

0.9.2233

10 Nov 15:28
Compare
Choose a tag to compare

Bug fixes

Resolved a problem with the web aseembly wrapper not correctly handling value endpoints

Improved memory use and compile time for large multi-dimensional arrays

0.9.2224

26 Oct 21:00
Compare
Choose a tag to compare

Version 0.9.2224

Added Patch Worker support

When running a patch headless, it is sometimes helpful to be able to perform work on the host. A new patch worker can be specified in a patch which allows for a js worker to interact with the loaded patch. See https://github.com/SoundStacks/cmajor/tree/main/examples/patches/PatchWorker for an example

Added ML inference script

There is a new script in tools/rtneural which adds support for an RTNeural to Cmajor transpiler - RTNeural json files can be converted into a Cmajor patch which implements the same ML inference.

Bug fixes

Fixed issues around specialisation of processors and functions with multi-dimensional arrays which lead to failure with unhelpful error messages.

Fixed issues related to value endpoints when used in oversampled nodes which could cause compiler failure, or empty values being passed into the node.

Fixed an implementation problem that lead to NaN being returned from tanh in some situations

Fixed an issue where processor.period would return an incorrect value when used in an oversampled node

Resolved a C++ generation issue with void types which could lead to code which didn't compile

Fixed a timeout issue when building under VSCode which could lead to failures to communicate with the runtime infrastructure

Resolved a problem which could lead to incorrect code generation for functions operating on slices.

0.9.2209

04 Oct 13:24
Compare
Choose a tag to compare
0.9.2209 Pre-release
Pre-release

Version 0.9.2209

Added Patch Worker support

When running a patch headless, it is sometimes helpful to be able to perform work on the host. A new patch worker can be specified in a patch which allows for a js worker to interact with the loaded patch. See https://github.com/SoundStacks/cmajor/tree/main/examples/patches/PatchWorker for an example

Bug fixes

Fixed issues around specialisation of processors and functions with multi-dimensional arrays which lead to failure with unhelpful error messages.

Fixed an implementation problem that lead to NaN being returned from tanh in some situations

Resolved a C++ generation issue with void types which could lead to code which didn't compile

Fixed a timeout issue when building under VSCode which could lead to failures to communicate with the runtime infrastructure

Resolved a problem which could lead to incorrect code generation for functions operating on slices.

0.9.2170

30 Aug 17:10
Compare
Choose a tag to compare

New language features

Some matrix operations have been added to the standard library. See https://cmajor.dev/docs/StandardLibrary#std_matrix for details

We have added support for if statements within graph connections. For now, the condition must be a compile time constant, so it cannot be used for dynamic routing. See https://cmajor.dev/docs/LanguageReference#conditional-connections for details.

Processors now support processor composition. This allows a wrapping processor to declare node instances, and to control how the input and output endpoints from the wrapped processor (and it's associated DSP) is called. This allows for things like bypass algorithms to be written efficiently, as well as complex dynamic routing algorithms. See https://cmajor.dev/docs/LanguageReference#processor-composition for details.

The rules for automatic conversion of constants have been tightened up, which may require casts to be added in places where previously the compiler would allow conversion. Specifically this rule may affect situations where runtime constants, such as processor.frequency are used. Adding the cast will restore the previous functionality.

Bug fixes

Resolved a possible name clash with JUCE classes when generating C++.

Resolved a problem with the default GUI where gesture ends were being send at the wrong time causing assertions within JUCE.

The error reporting around invalid node connections has been improved, giving more nuanced error messages.

A subtle problem related to slices of arrays which could trigger use-after-free type errors has been resolved.

Fixed an issue with incorrect warnings being generated for unsafe array access in some situations.

0.9.2131

27 Jul 10:54
Compare
Choose a tag to compare

New language features

The compiler now supports multi-dimensional arrays. The syntax uses the [a, b, c...] style sytax to declare multiple dimensions, see the language documentation here - https://cmajor.dev/docs/LanguageReference#multi-dimensional-arrays

External values have been reworked, allowing for more constructs to be supported, such as endpoint data types depending on supplied external values. In addition, the main module may now be parameterised, with external parameters being used to supply these parameter values.

We now support void as a valid data type for event endpoints. This is useful in situations where you want to communicate but there is no obvious value associated with the event. See the documentation for the syntax required for the event handler functions, and sending void messages within the graph.

Changes have been made to the way the main processor is determined. Previously the rules were not well defined when multiple suitable candidates were available. The compiler now gives an error, and you must specify a main processor with the [[ main ]] annotation. Additionally, patches can override the main processor by specifying a mainProcessor attribute.

Constant folding has been reworked, leading to compilation and code generation improvements where large constant data is declared.

Compile time improvements

The compile time has been significantly reduced for some situations which were previously causing slow compilation. Variable name lookup has been
reworked, and the implementation of large static arrays, giving benefits both to the parser, optimisations, and LLVM backend.

Timeline info

The patch player now sends through tempo information to the patch if required.

Bug fixes

Improvements have been made to error generation for some edge cases - slices and loop condition validation has been improved giving better error reporting when invalid expressions are used.

Resolved various problems with using complex values on stream endpoints.

Fixed an issue which could in some circumstances cause the return value of a function to be invalid.

Warnings were sometimes not being displayed in the VSCode panel - this has been resolved.

A problem related to graph nodes where multiple instances of the same processor type could cause incorrect code generation has been resolved.

A problem with references to array slices in the LLVM backend has been fixed.

A problem with empty structs as event types has been resolved.

An issue related to casts in graph connections when using delays has been resolved.

Internal updates

There has been significant work on the implementation of compiler intrinsics for WASM, giving a more maintainable implementation.

Some superfluous state members have been removed, giving a smaller state image size at runtime.

The default javascript GUI components have been support for touch displays.

A detector for infinite loops has been added providing logic to terminate performers which are taking too long to execute.

0.9.2051

09 May 20:56
Compare
Choose a tag to compare

Updated patch parameter logic

The rules around discrete parameters (ones specifying a step annotation) were confusing and inconsistent. This logic has been updated, adding a discrete option. See the patch documentation for more details.

Standard Library updates

Fixed an issue with the LFO which caused it to fail to instantiate. Resolved issues with triangle waveform output.

Bug fixes

Resolved an issue that could cause a runtime problem when attempting to play a malformed patch. This now reports the correct error.
Improved the load performance when the patch includes large arrays of data (e.g. pre-calculated tables, or external sample data).
Fixed the c++ generator so that it doesn't produce symbols with two leading underscores to avoid conflicts with reserved symbols on different platforms.
Resolved a problem on windows which could cause connection problems when starting the service in VSCode

Breaking changes to javascript API

We've extensively refactored the javascript API used by the patch GUI's (mainly the PatchConnection class). It now provides a better system for adding/removing multiple listeners rather than having a single callback function to respond to events. It has also gained more helper methods and more complete documentation.

0.9.2006

31 Mar 11:47
Compare
Choose a tag to compare

Standard Library updates

Fixed an issue with the LFO which caused it to fail to instantiate. Resolved issues with triangle waveform output.

Bug fixes

Resolved an issue that could cause a runtime problem when attempting to play a malformed patch. This now reports the correct error.

Breaking changes to javascript API

We've extensively refactored the javascript API used by the patch GUI's (mainly the PatchConnection class). It now provides a better system for adding/removing multiple listeners rather than having a single callback function to respond to events. It has also gained more helper methods and more complete documentation.

0.9.1967

09 Mar 10:06
Compare
Choose a tag to compare

VSCode updates

This version includes a significantly upgraded VSCode experience. The VSCode extension has a re-worked user interface providing metering on inputs and outputs, and the ability to mute (disable) and connect files to input streams. The graph panel shows a visualisation of the Cmajor patch, with links to the components within the source code. Panels are also provided for access to and control over the audio subsystem in use, and the ability to view generated code for supported target platforms.

The VSCode extension supports macOS (x64 and arm64), Windows (x64 and arm64) and Linux (x64) platforms.

Updated std library

The standard library has been updated. std::smoothing can now be parameterised to smooth different data types (e.g. float64, or float<2>) and the algorithm produces more accurate results for longer smoothing intervals. lerp has been updated to support vector types.

Various bug fixes

The graph printer was struggling to correctly identify implicit graph nodes, leading to failure to generate some graphs.
Logic to check the scope of variables used in slices could lead to compilation failure.
Better support for graph connections using arrays of indexes, with clearer error reporting for incorrect use.
Resolved issues in the LLVM code generator which could lead to failure to compille some if statements involving return statements.

0.9.1937

24 Feb 18:49
Compare
Choose a tag to compare

Improved VSCode integration

Significant work has been completed on the integration of Cmajor and VSCode. The Cmajor extension for VSCode now opens an integrated panel in VSCode containing both the user interface and additional views of the top level inputs and outputs, audio graph, and simple transport controls (e.g. start/stop audio). Visualisation of the data flowing through the patch are displayed.

Graph generation

The command line tool now includes a graph generation option (via generate --target=graph) which produces a visual representation of the audio graph and endpoint connections.

Support for windows Arm64 platforms

The tooling and VSCode extension now include releases for windows on arm64.

Improved support for indexes in connections and graph event handlers

Indexes can now be specified for nodes and endpoints allowing graph nodes arrays and endpoints arrays to specify individual routing rules. In addition, graph event handlers can also write to event endpoints specifying node indexes and endpoints indexes.

Various bug fixes

Some issues related to graph event handlers have been resolved, allowing more sophisticated expressions to be used
Top level event handlers with multiple types could lead to compilation errors from the C++ backend, this is now resolved.
Resolved an issue with using empty structures in event handlers
Fixed issues in the standard library related to vector support for the pow() function

0.9.1822

27 Jan 21:30
Compare
Choose a tag to compare

LLVM

We have updated block alignment to support AVX-512 processors. Previous releases could incorrectly align memory leading to issues running some AVX.512 instructions.