Skip to content

Oscillators

Synome features two independent oscillators with saw/pulse morphing, FM synthesis between them, hard sync, and a noise generator. Both oscillators feed into a mixer before the filter stage.

ParameterIDRangeDefaultUnitDescription
osc1_shape00.0–1.00.0Waveform morph: 0 = sawtooth, 1 = pulse
osc1_coarse1-24–+240stCoarse pitch in semitones
osc1_fine2-100–+1000centsFine pitch in cents
osc1_mod_lfo3on/offoffEnable LFO → pitch modulation
osc1_mod_env4on/offoffEnable Mod Envelope → pitch modulation
osc1_fm_amount50.0–1.00.0%FM depth (OSC2 → OSC1 frequency)
osc1_fm_env6on/offoffMod Envelope → FM amount
osc1_fm_lfo7on/offoffLFO → FM amount

OSC2’s output modulates OSC1’s frequency. The FM amount is the modulation index:

osc1_freq_effective = osc1_freq × (1 + osc2_output × fm_amount)

FM amount can be further modulated by the Mod Envelope and/or LFO for dynamic timbral changes.

ParameterIDRangeDefaultUnitDescription
osc2_shape130.0–1.00.0Waveform morph: 0 = sawtooth, 1 = pulse
osc2_coarse14-24–+240stCoarse pitch in semitones
osc2_fine15-100–+1000centsFine pitch in cents
osc2_sync16on/offoffHard sync: OSC2 resets OSC1 phase
osc2_mod_lfo17on/offoffEnable LFO → pitch modulation
osc2_mod_env18on/offoffEnable Mod Envelope → pitch modulation

When enabled, OSC2’s phase wrap resets OSC1’s phase to zero. This creates complex harmonics that change with OSC1’s pitch. Classic sync sweep: tune OSC1 higher while synced to OSC2.

Both oscillators morph continuously between sawtooth and pulse:

output = saw × (1 - shape) + pulse × shape
Shape ValueWaveform
0.0Pure sawtooth
0.2575% saw / 25% pulse
0.550/50 blend
0.7525% saw / 75% pulse
1.0Pure pulse (50% duty cycle)

The oscillator engine supports pluggable synthesis modes:

ModeIndexDescriptionStatus
Analog0Saw/pulse morphing (current)✅ Available
Wavetable1Scan through wavetable frames🔮 Planned
Granular2Granular cloud synthesis🔮 Planned
Physical3Physical modeling / Karplus-Strong🔮 Planned

The mixer blends the two oscillators with a noise generator before the filter:

ParameterIDRangeDefaultUnitDescription
mix_osc180.0–1.00.7%OSC1 level
mix_osc290.0–1.00.0%OSC2 level
mix_noise100.0–1.00.0%Noise level
mix_noise_type110–100 = white noise, 1 = pink noise
pitch_mod_source120–10Pitch modulation source selector
TypeValueSpectrumUse Case
White0Equal energy per frequencyBright, hissy — cymbals, wind
Pink1Equal energy per octave (−3 dB/oct)Warmer, natural — ocean, rain

Pink noise uses a 7-stage Voss-McCartney algorithm for accurate 1/f spectral rolloff.

ParameterIDRangeDefaultUnitDescription
pitch_bend_range670–242stPitch bend wheel range
pitch_mod_amount680–240stPitch modulation depth
vibrato_rate690.1–155.0HzVibrato speed
vibrato_depth700.0–1.00.0stVibrato depth

When osc1_mod_lfo or osc2_mod_lfo is enabled, the LFO modulates that oscillator’s pitch by pitch_mod_amount semitones. Similarly, osc1_mod_env / osc2_mod_env routes the Mod Envelope to pitch.

final_freq = base_freq × 2^((coarse + fine/100 + pitch_mod) / 12)

Where pitch_mod is the sum of enabled modulation sources × pitch_mod_amount.

ParameterIDRangeDefaultUnitDescription
volume280.0–1.00.7%Master volume
mono29on/offoffMono mode (single voice)
legato30on/offoffLegato (no envelope retrigger on overlapping notes)
unison_mode310–30Unison voice stacking
pan32-1.0–+1.00.0Stereo pan (equal-power law)
glide330–20000msPortamento time
ValueMode
0Off
12× unison
24× unison
38× unison
ParameterIDRangeDefaultUnitDescription
master_drive710.0–1.00.0%Soft saturation (tanh waveshaper)
voice_count720–32Maximum polyphony (4/8/12/16)
master_tune73-100–+1000centsGlobal tuning offset