-
Notifications
You must be signed in to change notification settings - Fork 3
Home
PluginCollider is an implementation of
scsynth (the
SuperCollider server component) designed to run directly inside a DAW
plugin. While PluginCollider can listen for OSC messages from sclang
,
the intended workflow is to build precompiled
SynthDefs and include
them in the DAW plugin instance. This way, sclang
is not needed when
loading your DAW project.
A PluginCollider project is a snapshot of a SuperCollider session in which SynthDefs and buffers (with buffer support planned in a future version) are saved into a single entity. This allows them to be restored and played musically within a DAW session.
Within a project, you can organize a SynthDef hierarchy that includes MIDI Note nodes (SynthDefs triggered by MIDI notes) and FX nodes (SynthDefs that run continuously as effects). You can group these nodes into a Group, similar to how grouping works in SuperCollider.
- MIDI Note Nodes: Triggered by MIDI notes. You can specify a note range so that only notes within that range will activate the node.
- FX Nodes: Always running, acting as audio effects.
The UI allows you to drag nodes to reorder them within the group. You can also use the context menu to add or remove nodes.
The quickest way to generate an .scsynthdef
file from sclang
is to
use the .writeDefFile(".")
method, which writes the SynthDef to the
current directory:
SynthDef("testfx2b", { |out = 0, vol = 1|
var sig;
sig = SoundIn.ar([0, 1]); // <==== READ INPUT FROM DAW
ReplaceOut.ar(out, sig * vol);
}).writeDefFile(".");
If you're using audio input from your DAW, the SoundIn
UGen is
required.
When processing MIDI Note nodes, PluginCollider will look for these parameters in the SynthDef:
Midi Event | ScSynDef args | Conversion |
---|---|---|
note-on midi note | freq | Converts midi node (0-127) to frequency (hz) |
note-on velocity | amp | Converts midi velocity (0-127) to amp(0.0-1.0), linearly (for now). |
note-off | gate | Sends gate=0 on midi note off |
If these parameters are omitted, the node will still be triggered, but with the SynthDef's default values.
SynthDef parameters are read from the .scsynthdef
file. Since there is
no metadata available (especially for parameter ranges), PluginCollider
will attempt to infer this information based on the parameter names and
default values.
SuperCollider ControlBuses are mapped to DAW plugin parameters. In the ControlBus section of the project tree, you can configure up to 32 different ControlBuses by setting their names and ranges. These should be visible from your DAW.
You can assign a SynthDef parameter to a ControlBus by clicking "Assign". PluginCollider will prompt you to optionally reconfigure the ControlBus to match the SynthDef's parameter range. Once a parameter is assigned to a ControlBus, it becomes "grayed out" in the SynthDef panel, indicating that it is now externally controlled.
If PluginCollider were distributed as source-only (requiring users to
build it themselves), this wouldn't be an issue. However, due to macOS's
strict binary notarization requirements and the complexity of handling
Windows binaries (which require .DLL
s to be on the system path), the
initial user experience was suboptimal.
To simplify deployment, PluginCollider is currently compiled with
SC_DYNAMIC_PLUGINS
set to false
, ensuring that everything works out
of the box.