supersonic-scsynth
v0.15.0
Published
SuperCollider scsynth WebAssembly port for AudioWorklet - Run SuperCollider synthesis in the browser
Maintainers
Readme
Note: Alpha Status: SuperSonic is in active development. The API may evolve, but the core synthesis engine is solid and ready for experimentation. Feedback and ideas are most welcome.
░█▀▀░█░█░█▀█░█▀▀░█▀▄░█▀▀░█▀█░█▀█░▀█▀░█▀▀
░▀▀█░█░█░█▀▀░█▀▀░█▀▄░▀▀█░█░█░█░█░░█░░█░░
░▀▀▀░▀▀▀░▀░░░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀▀▀SuperSonic - SuperCollider's powerful audio synthesis engine scsynth running in the browser as an AudioWorklet.
- AudioWorklet - runs in a dedicated high priority audio thread
- WebAssembly - scsynth's C++ code compiled for the web
- OSC API - talk to the scsynth server through its native OSC API
Getting Started
Injecting the full power of SuperCollider's scsynth audio engine into your browser is simple.
Import SuperSonic and initialise it:
import { SuperSonic } from "supersonic-scsynth";
const baseURL = "/supersonic"; // Configure for your setup
const supersonic = new SuperSonic({
workerBaseURL: `${baseURL}/workers/`,
wasmBaseURL: `${baseURL}/wasm/`,
synthdefBaseURL: `${baseURL}/synthdefs/`,
sampleBaseURL: `${baseURL}/samples/`,
});
await supersonic.init();Load and play a synth:
await supersonic.loadSynthDef("sonic-pi-prophet");
supersonic.send("/s_new", "sonic-pi-prophet", -1, 0, 0, "note", 60);Load and play a sample:
await supersonic.loadSynthDef("sonic-pi-basic_stereo_player");
await supersonic.loadSample(0, "loop_amen.flac");
supersonic.send("/s_new", "sonic-pi-basic_stereo_player", -1, 0, 0, "buf", 0);Take a look at example/simple.html for a minimal working example.
Installation
Grab the latest pre-built distribution and host it on your server:
curl -O https://samaaron.github.io/supersonic/supersonic-dist.zip
unzip supersonic-dist.zipOr install via npm:
npm install supersonic-scsynth-bundleNote: SuperSonic must be self-hosted due to browser security requirements around SharedArrayBuffer. It cannot be loaded from a CDN. See Browser Setup for the details.
Documentation
- API Reference - Methods, callbacks, and configuration
- Server Command Reference - OSC commands for controlling scsynth
- Metrics - Performance monitoring and debugging
- Browser Setup - Required headers and browser requirements
- CDN and Self-Hosting - Why self-hosting is required
- Building from Source - Compiling the WASM yourself
Support
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.
License
GPL v3 - This is a derivative work of SuperCollider
Credits
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!
