Link search Menu Expand Document

waves

waves is a bank of wavetable oscillators with modulation. Each oscillator is passed through a state variable filter.

Architecture

Oscillators

Each oscillator has phase modulation and waveshape-modulation. Modulation feedback is supported through an arbitrary delay time.

NB: PM is almost FM but not quite- it has the effect of high-pass-filtering the modulator, which has the advantage of sounding “in tune,” however slow changes are imperceptible. (use the hz or tune parameters along with hzSlew for LFO-type behavior.)

Wavetables are stored sequentially in memory, and the “wave” parameter interpolates between adjacent tables. Currently the contents of the wavetables are fixed, but in the future we should support loading arbitrary table data from SD card.

The current contents are, in this order: sine, triangle-ish, saw-ish, “more saw.”

All are bandlimited to 11 harmonics or less, and higher harmonics are added consistently as the waveshape parameter is increased.

NB: FM and shape modulation can still produce aliasing; the frequency components generated by these processes are much harder to control.

Smoothing

All oscillator parameters are subjected to smoothing by simple lowpass filters, with the smoothing parameter given in seconds. This means that new parameter values will be approached with an exponential curve, and converge with the target value in the given amount of time.

Smoothing on audio-modulated parameters always occurs before modulation is applied. “hzSlew” parameters are applied to frequency after frequency is calculated from “ratio” and “hz.”

Filters

Each state variable filter simultaneously produces lowpass, highpass, bandpass, and notch outputs. one output at a time can be selected with the “mode” parameters. (We dropped arbitrary mode mixing for more CPU cycles; it is easy to add this back, or arbitrary hard-patching of individual mode outputs.)

Routing

The routing parameters (adc0_dac0, osc0_dac0, etc) represent boolean patch points. On (1), or off (0).

Each oscillator output N is patched to filer input N. Filter output is arbitrarily mixed with oscillator output. the sum is multiplied by the “ampN” parameter, and patched to the hardware output channels according to oscN_dac0, oscN_dac1, etc.

oscN --> svfN  * wetN --+--> * oscOutN
    |                   ^
    V                   |
    --------> * dryN ----

oscOutX ---> oscX_dacY ---> outY
etc.

adcX ---> * adcX_dacY ---> dacY

Parameters

hzN

Oscillator N, base frequency

  • Parameter type: Note
  • Range: [~8 Hz, ~16000 Hz]

tuneN

Oscillator N, tuning ratio Actual base frequency is hz * tune

  • Parameter type: Fixed
  • Range: [0.25, 4.0]

ampN

Oscillator N, amplitude (post-filter)

  • Parameter type: Amp
  • Range: [0, 1.0] (bees will display dB)

pmXY

Phase-modulation amount from oscX → oscY

  • Parameter type: Fixed
  • Range: [0, 1]

wmXY

Waveshape-modulation amount from oscX → oscY

  • Parameter type: Fixed
  • Range: [0, 1]

waveN

Base waveshape for oscillator N

  • Parameter type: Fixed
  • Range: [0, 1]

cutN

Filter cutoff frequency for filter N

  • Parameter type: SvfFreq
  • Range: [ ~8hz, ~16000hz ]

rqN

Reciprocal of Q for filter N Zero equals full resonance

  • Parameter type: Fixed
  • Range: [0, 2]

modeN

Filter mode selection. 0=low, 1=band, 2=high, 3=notch

  • Parameter type: Fixed
  • Range: [0, 3.0]

fwetN

Volume of filtered signal from filter N

  • Parameter type: Amp
  • Range: [0, 1.0] (bees will display dB)

fdryN

Volume of dry signal from filter 1

  • Parameter type: Amp
  • Range: [0, 1.0] (bees will display dB)

oscN_dacN

Delay, in seconds, applied to modulation input signals.

  • Parameter type: Fixed
  • Range: [0, 1.0) (an arbitrary scale, 1.0 == 0x10000 samples)

Slew

  • hzNSlew
  • pmXYSlew
  • wmXYSlew
  • waveNSlew
  • ampNSlew
  • cutNSlew
  • rqNSlew
  • wetNSlew
  • dryNSlew
  • dacSlew0
  • dacSlew1
  • dacSlew2
  • dacSlew3

Slew times for corresponding parameters

  • Parameter type: Integrator
  • Range: [0, 32] in seconds, convergence to -120dB

Output Routing

  • adcX_dacY
  • oscX_dacY

Hardware output routing for given output busses

  • Parameter type: Boolean
  • Range: 0 or 1

CV Output

  • dac0
  • dac1
  • dac2
  • dac3

CV output value for each channel

  • Parameter type: Fixed
  • Range: [0, 1]

In Use

Hz controls are scaled for perceived pitch linearity. Multiplying MIDI note * 256 and attaching to hz input gives semitones. the default hz scaling table in BEES has tuning data for A=440, 12tet; this can be customized and updated with a clean boot if desired.