A clockwork scsynth
See the codeNote: Still Alpha Status: SuperSonic is in active development. The API may continue to evolve, but the core synthesis engine is solid and ready for experimentation. Feedback and ideas are most welcome.
░█▀▀░█░█░█▀█░█▀▀░█▀▄░█▀▀░█▀█░█▀█░▀█▀░█▀▀
░▀▀█░█░█░█▀▀░█▀▀░█▀▄░▀▀█░█░█░█░█░░█░░█░░
░▀▀▀░▀▀▀░▀░░░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀▀▀
Back in the late 90s James McCartney designed a series of live audio programming environments called SuperCollider. These were systems with both programming languages and audio runtimes carefully designed for live realtime modification at every level - from high sweeping programming language abstractions all the way down to the fine control of the low-level synthesis components of the audio chain.
One of the many gifts from this work is scsynth - the core synthesis engine James created for version 3 of SuperCollider. It was at this point when he formally separated the language from the synth engine.
This split made it possible to combine scsynth's powerful audio synthesis capabilities with any existing - or yet to exist - programming language.
This then led to a suite of powerful new live coding languages using scsynth for audio synthesis.
What if you didn't just bring your language to scsynth? What if you brought scsynth to your environment?
This is SuperSonic. All the synthesis power of the original scsynth - rearchitected to reach new places.
SuperSonic is a complete reworking of SuperCollider's audio synthesis engine scsynth designed to run in new places - in the browser as an AudioWorklet, as a standalone native server, or as a native shared library running directly in the BEAM via a NIF. Currently it has the following features:
SuperSonic is scsynth running on clockwork. clockwork provides the audio device IO, MIDI, OSC, gamepad input, transport clock and Ableton Link; scsynth provides the synthesis engine, node tree and UGens. The two connect through Clockwork's DSP API in dsp_api.h.
/clockwork/sched/flush cancels what is still waiting.nextNodeId() allocates unique node IDs across any number of threads and workers - guaranteed unique with no clashes.supersonic-scsynth with separate packages for core, synthdefs and samples./clockwork/* verbs for MIDI, gamepad, the clock, tracks and recording alongside.enif_send().Try the live demo: sonic-pi.net/supersonic/demo.html
SuperSonic can be fetched remotely via CDN, locally via npm or self-built — see Installation.
Clone with the submodule and build with CMake - see Building from Source.
git clone --recurse-submodules https://github.com/samaaron/supersonic
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target SuperSonic
CMakeLists.txt here names the guest and links the host; everything else is clockwork's own build - see clockwork/docs/BUILDING.md for the options.
Build the BEAM NIF with cmake -B build/nif -DCLOCKWORK_NIF=ON — see Building from Source.
For the full list of configuration options, see the API Reference. For installation options see the Installation Guide. Once installed, head to the Quick Start to make your first sound.
SuperSonic is brought to you by Sam Aaron. Please consider joining the community of supporters enabling Sam's work on creative coding projects like this, Sonic Pi and Tau5.
SuperSonic as a whole is copyleft: scsynth is GPL-3.0-or-later and clockwork is AGPL-3.0-or-later (or commercially licensed), so the combined program is AGPL-3.0-or-later. The clockwork half keeps its own licence and stays separable. See LICENSE and clockwork/LICENSE.
The synth is based on SuperCollider by James McCartney and the SuperCollider community. This AudioWorklet port was inspired by Hanns Holger Rutz who started the first port of scsynth to WASM and Dennis Scheiba who continued this work. Thank you to everyone in the SuperCollider community!
C++
65.4%
JavaScript
22.5%
C
4.7%
Rust
2.2%
Shell
1.2%
HTML
1.1%
CSS
1.0%
A clockwork scsynth
See the codeNote: Still Alpha Status: SuperSonic is in active development. The API may continue to evolve, but the core synthesis engine is solid and ready for experimentation. Feedback and ideas are most welcome.
░█▀▀░█░█░█▀█░█▀▀░█▀▄░█▀▀░█▀█░█▀█░▀█▀░█▀▀
░▀▀█░█░█░█▀▀░█▀▀░█▀▄░▀▀█░█░█░█░█░░█░░█░░
░▀▀▀░▀▀▀░▀░░░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀▀▀
Back in the late 90s James McCartney designed a series of live audio programming environments called SuperCollider. These were systems with both programming languages and audio runtimes carefully designed for live realtime modification at every level - from high sweeping programming language abstractions all the way down to the fine control of the low-level synthesis components of the audio chain.
One of the many gifts from this work is scsynth - the core synthesis engine James created for version 3 of SuperCollider. It was at this point when he formally separated the language from the synth engine.
This split made it possible to combine scsynth's powerful audio synthesis capabilities with any existing - or yet to exist - programming language.
This then led to a suite of powerful new live coding languages using scsynth for audio synthesis.
What if you didn't just bring your language to scsynth? What if you brought scsynth to your environment?
This is SuperSonic. All the synthesis power of the original scsynth - rearchitected to reach new places.
SuperSonic is a complete reworking of SuperCollider's audio synthesis engine scsynth designed to run in new places - in the browser as an AudioWorklet, as a standalone native server, or as a native shared library running directly in the BEAM via a NIF. Currently it has the following features:
SuperSonic is scsynth running on clockwork. clockwork provides the audio device IO, MIDI, OSC, gamepad input, transport clock and Ableton Link; scsynth provides the synthesis engine, node tree and UGens. The two connect through Clockwork's DSP API in dsp_api.h.
/clockwork/sched/flush cancels what is still waiting.nextNodeId() allocates unique node IDs across any number of threads and workers - guaranteed unique with no clashes.supersonic-scsynth with separate packages for core, synthdefs and samples./clockwork/* verbs for MIDI, gamepad, the clock, tracks and recording alongside.enif_send().Try the live demo: sonic-pi.net/supersonic/demo.html
SuperSonic can be fetched remotely via CDN, locally via npm or self-built — see Installation.
Clone with the submodule and build with CMake - see Building from Source.
git clone --recurse-submodules https://github.com/samaaron/supersonic
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target SuperSonic
CMakeLists.txt here names the guest and links the host; everything else is clockwork's own build - see clockwork/docs/BUILDING.md for the options.
Build the BEAM NIF with cmake -B build/nif -DCLOCKWORK_NIF=ON — see Building from Source.
For the full list of configuration options, see the API Reference. For installation options see the Installation Guide. Once installed, head to the Quick Start to make your first sound.
SuperSonic is brought to you by Sam Aaron. Please consider joining the community of supporters enabling Sam's work on creative coding projects like this, Sonic Pi and Tau5.
SuperSonic as a whole is copyleft: scsynth is GPL-3.0-or-later and clockwork is AGPL-3.0-or-later (or commercially licensed), so the combined program is AGPL-3.0-or-later. The clockwork half keeps its own licence and stays separable. See LICENSE and clockwork/LICENSE.
The synth is based on SuperCollider by James McCartney and the SuperCollider community. This AudioWorklet port was inspired by Hanns Holger Rutz who started the first port of scsynth to WASM and Dennis Scheiba who continued this work. Thank you to everyone in the SuperCollider community!
C++
65.4%
JavaScript
22.5%
C
4.7%
Rust
2.2%
Shell
1.2%
HTML
1.1%
CSS
1.0%