Sorbis is a domain-specific scripting language designed for synthesizing audio through modular signal-flow chains. It allows composers to define complex synthesis architectures—from oscillators and filters to rhythmic sequencers—using a concise, text-based syntax.
Overview
Sorbis operates on a "left-to-right" signal flow paradigm. Chains are composed of generators and processors, then mixed into a final output and rendered to a high-fidelity WAV file.
- Modular Architecture: Build complex instruments by chaining nodes with the
>>operator. - Modulation Engine: Use
~modulation chains for sample-accurate control of any parameter. - Three-Part Sequencing: A robust system for pitch, rhythm, and gate logic.
- Open Source: Built in Rust for performance and portability.
_____ __ _
/ ___/ ____ _____ / /_ (_)____
\__ \ / __ \/ ___// __ \ / // ___/
___/ // /_/ / / / /_/ // /(__ )
/____/ \____/_/ /_.___//_//____/ >> >> >>
~ SIGNAL FLOW COMPUTER MUSIC ENGINE ~
Core Syntax
A Sorbis script consists of named assignments. The renderer resolves all dependencies and outputs the special chain o.
// Global tempo
bpm 120
// A simple modulation chain
~lfo: lfo 0.5 >> mul 400 >> add 600
// The output chain
o: saw 55 >> moog ~lfo 0.6 >> mul 0.5
Signal Flow Operator (>>)
Nodes pass audio forward. Use | or , as whitespace to make long chains more readable.
~filtered: noise >> bpf 2000 1.2 >> mul 0.4
Glob References
Sum multiple related chains instantly using the .. suffix:
o: mix ~voice.. // Sums ~voice1, ~voice2, etc.
Synthesis Nodes
Oscillators & Noise
Sorbis includes standard periodic waveforms (antialiased) and colored noise generators for subtractive and FM synthesis.
- Waveforms:
sin,saw,squ,tri - Noise:
noise(white),pink,brown - LFO: A triangle-shaped low-frequency oscillator for modulation.
~sweep: lfo 0.1 >> mul 10000
o: squ ~sweep >> mul 0.1
Filters
A comprehensive suite of filters for spectral shaping:
- Standard:
lpf,hpf,bpf,notch,moog(4-pole ladder) - Specialized:
butter(Butterworth),lowpole,resonator,follow(envelope follower) - Shelving:
lowshelf,highshelf,bell
Math & Utilities
- mul / add: Primary nodes for gain staging and parameter offsetting.
- detune: Pitch-shift frequency signals (Hz) by semitones.
- delay / feedback: Create echo units and physical modeling effects.
Sequencing System
Sorbis separates melody into three distinct components to provide maximum flexibility:
- Pitch: A cycling list of MIDI notes.
- Rhythm: A looping pattern of beat durations (supports tuplets and repeats).
- Combine: Merges the two into
.freq(Hz) and.gate(on/off) signals.
// AM Synthesis (telphone tone)
bpm 60
~ts: pitch 72
~tr: rhythm 1 -1
~telephone: combine ~ts ~tr
~t_env: adsr ~telephone.gate 0.1 0.1 1 0.
~carrier: sin ~ts.freq >> mul ~t_env
~modulator: sin 30 >> mul 10
~fm: mix ~carrier >> mul ~modulator
o: mix ~fm >> mul 0.1
Envelopes
ADSR
Triggered by a gate signal (typically from combine).
adsr gate attack_s decay_s sustain_level release_s
Breakpoint (Env)
A multi-point envelope that triggers once at the start of rendering.
env value1 time_ms1 value2 time_ms2 ... curve
Performance Characteristics
- Sample-Accurate Modulation: Math nodes and filters accept
~chainreferences for per-sample updates. - Weighted Probability: The
choosenode allows for probabilistic sequencing and generative melodies. - Stereo Imaging: Integrated
pannodes for spatial placement across the stereo field.
Technical Specifications
| Feature | Details |
|---|---|
| Implementation | Rust |
| Output Format | WAV (32-bit float) |
| Engine | fundsp / cpal |
| Licensing | AGPLv3 (Software) / CC BY-NC-ND 4.0 (Docs) |