oscillators.lib

This library contains a collection of sound generators. Its official prefix is os.

Wave-Table-Based Oscillators


(os.)sinwaveform

Sine waveform ready to use with a rdtable.

Usage

sinwaveform(tablesize) : _

Where:

  • tablesize: the table size

(os.)coswaveform

Cosine waveform ready to use with a rdtable.

Usage

coswaveform(tablesize) : _

Where:

  • tablesize: the table size

(os.)phasor

A simple phasor to be used with a rdtable. phasor is a standard Faust function.

Usage

phasor(tablesize,freq) : _

Where:

  • tablesize: the table size
  • freq: the frequency of the phasor (Hz)

(os.)hs_phasor

Hardsyncing phasor to be used with an rdtable.

Usage

hs_phasor(tablesize,freq,c) :  _

Where:

  • tablesize: the table size
  • freq: the frequency of the phasor (Hz)
  • c: a clock signal, c>0 resets phase to 0

(os.)hsp_phasor

Hardsyncing phasor with selectable phase to be used with an rdtable.

Usage

hsp_phasor(tablesize,freq,p,c)

Where:

  • tablesize: the table size
  • freq: the frequency of the phasor (Hz)
  • p: phase init (0 <= p <=1)
  • c: a clock signal, c>0 resets phase to 0

(os.)oscsin

Sine wave oscillator. oscsin is a standard Faust function.

Usage

oscsin(freq) : _

Where:

  • freq: the frequency of the wave (Hz)

(os.)hs_oscsin

Sin lookup table with hardsyncing phase.

Usage

hs_oscsin(freq,c) : _

Where:

  • freq: the fundamental frequency of the phasor
  • c: a clock signal, c>0 resets phase to 0

(os.)osccos

Cosine wave oscillator.

Usage

osccos(freq) : _

Where:

  • freq: the frequency of the wave (Hz)

(os.)oscp

A sine wave generator with controllable phase.

Usage

oscp(freq,phase) : _

Where:

  • freq: the frequency of the wave (Hz)
  • phase: the phase in radian

(os.)osci

Interpolated phase sine wave oscillator.

Usage

osci(freq) : _

Where:

  • freq: the frequency of the wave (Hz)

LFOs

Low-Frequency Oscillators (LFOs) have prefix lf_ (no aliasing suppression, which is not audible at LF).


(os.)lf_imptrain

Unit-amplitude low-frequency impulse train. lf_imptrain is a standard Faust function.

Usage

lf_imptrain(freq) : _

Where:

  • freq: frequency in Hz

(os.)lf_pulsetrainpos

Unit-amplitude nonnegative LF pulse train, duty cycle between 0 and 1.

Usage

lf_pulsetrainpos(freq,duty) : _

Where:

  • freq: frequency in Hz
  • duty: duty cycle between 0 and 1

(os.)lf_pulsetrain

Unit-amplitude zero-mean LF pulse train, duty cycle between 0 and 1.

Usage

lf_pulsetrain(freq,duty) : _

Where:

  • freq: frequency in Hz
  • duty: duty cycle between 0 and 1

(os.)lf_squarewavepos

Positive LF square wave in [0,1]

Usage

lf_squarewavepos(freq) : _

Where:

  • freq: frequency in Hz

(os.)lf_squarewave

Zero-mean unit-amplitude LF square wave. lf_squarewave is a standard Faust function.

Usage

lf_squarewave(freq) : _

Where:

  • freq: frequency in Hz

(os.)lf_trianglepos

Positive unit-amplitude LF positive triangle wave.

Usage

lf_trianglepos(freq) : _

Where:

  • freq: frequency in Hz

(os.)lf_triangle

Positive unit-amplitude LF triangle wave lf_triangle is a standard Faust function.

Usage

lf_triangle(freq) : _

Where:

  • freq: frequency in Hz

Low Frequency Sawtooths

Sawtooth waveform oscillators for virtual analog synthesis et al. The 'simple' versions (lf_rawsaw, lf_sawpos and saw1), are mere samplings of the ideal continuous-time ("analog") waveforms. While simple, the aliasing due to sampling is quite audible. The differentiated polynomial waveform family (saw2, sawN, and derived functions) do some extra processing to suppress aliasing (not audible for very low fundamental frequencies). According to Lehtonen et al. (JASA 2012), the aliasing of saw2 should be inaudible at fundamental frequencies below 2 kHz or so, for a 44.1 kHz sampling rate and 60 dB SPL presentation level; fundamentals 415 and below required no aliasing suppression (i.e., saw1 is ok).


(os.)lf_rawsaw

Simple sawtooth waveform oscillator between 0 and period in samples.

Usage

lf_rawsaw(periodsamps)

Where:

  • periodsamps: number of periods per samples

(os.)lf_sawpos_phase

Simple sawtooth waveform oscillator between 0 and 1 with phase control.

Usage

lf_sawpos_phase(phase,freq)

Where:

  • phase: phase
  • freq: frequency

(os.)lf_sawpos

Simple sawtooth waveform oscillator between 0 and 1.

Usage

lf_sawpos(freq)

Where:

  • freq: frequency

(os.)lf_sawpos_reset

Simple sawtooth waveform oscillator between 0 and 1. with reset.

Usage

lf_sawpos_reset(freq,reset)

Where:

  • freq: frequency
  • reset: reset the oscillator to 0

(os.)lf_sawpos_phase_reset

Simple sawtooth waveform oscillator between 0 and 1. with phase control and reset.

Usage

lf_sawpos_phase_reset(freq,phase,reset)

Where:

  • freq: frequency
  • phase: phase between 0 and 1
  • reset: reset the oscillator to 0

(os.)lf_saw

Simple sawtooth waveform. lf_saw is a standard Faust function.

Usage

lf_saw(freq)

Where:

  • freq: frequency

Bandlimited Sawtooth


(os.)sawN

Bandlimited Sawtooth

sawN(N,freq), sawNp, saw2dpw(freq), saw2(freq), saw3(freq), saw4(freq), saw5(freq), saw6(freq), sawtooth(freq), saw2f2(freq) saw2f4(freq)

Method 1 (saw2)

Polynomial Transition Regions (PTR) (for aliasing suppression).

References

Method 2 (sawN)

Differentiated Polynomial Waves (DPW) (for aliasing suppression).

Reference

"Alias-Suppressed Oscillators based on Differentiated Polynomial Waveforms", Vesa Valimaki, Juhan Nam, Julius Smith, and Jonathan Abel, IEEE Tr. Acoustics, Speech, and Language Processing (IEEE-ASLP), Vol. 18, no. 5, May 2010.

Other Cases

Correction-filtered versions of saw2: saw2f2, saw2f4 The correction filter compensates "droop" near half the sampling rate. See reference for sawN.

Usage

sawN(N,freq) : _
sawNp(N,freq,phase) : _
saw2dpw(freq) : _
saw2(freq) : _
saw3(freq) : _ // based on sawN
saw4(freq) : _ // based on sawN
saw5(freq) : _ // based on sawN
saw6(freq) : _ // based on sawN
sawtooth(freq) : _ // = saw2
saw2f2(freq) : _
saw2f4(freq) : _

Where:

  • N: polynomial order
  • freq: frequency in Hz
  • phase: phase

(os.)sawNp

TODO: MarkDown doc in comments


(os.)saw2dpw

TODO: MarkDown doc in comments


(os.)saw3

TODO: MarkDown doc in comments


(os.)sawtooth

Alias-free sawtooth wave. 2nd order interpolation (based on saw2). sawtooth is a standard Faust function.

Usage

sawtooth(freq) : _

Where:

  • freq: frequency

(os.)saw2f2

TODO: MarkDown doc in comments


(os.)saw2f4

TODO: MarkDown doc in comments

Bandlimited Pulse, Square, and Impulse Trains

Bandlimited Pulse, Square, and Impulse Trains.

pulsetrainN, pulsetrain, squareN, square, imptrain, imptrainN, triangle, triangleN

All are zero-mean and meant to oscillate in the audio frequency range. Use simpler sample-rounded lf_* versions above for LFOs.

Usage

pulsetrainN(N,freq,duty) : _
pulsetrain(freq, duty) : _ // = pulsetrainN(2)
squareN(N, freq) : _
square : _ // = squareN(2)
imptrainN(N,freq) : _
imptrain : _ // = imptrainN(2)
triangleN(N,freq) : _
triangle : _ // = triangleN(2)

Where:

  • N: polynomial order
  • freq: frequency in Hz

(os.)pulsetrainN

TODO: MarkDown doc in comments


(os.)pulsetrain

Bandlimited pulse train oscillator. Based on pulsetrainN(2). pulsetrain is a standard Faust function.

Usage

pulsetrain(freq, duty) : _

Where:

  • freq: frequency
  • duty: duty cycle between 0 and 1

(os.)squareN

TODO: MarkDown doc in comments


(os.)square

Bandlimited square wave oscillator. Based on squareN(2). square is a standard Faust function.

Usage

square(freq) : _

Where:

  • freq: frequency

(os.)impulse

One-time impulse generated when the Faust process is started. impulse is a standard Faust function.

Usage

impulse : _

(os.)imptrainN

TODO: MarkDown doc in comments


(os.)imptrain

Bandlimited impulse train generator. Based on imptrainN(2). imptrain is a standard Faust function.

Usage

imptrain(freq) : _

Where:

  • freq: frequency

(os.)triangleN

TODO: MarkDown doc in comments


(os.)triangle

Bandlimited triangle wave oscillator. Based on triangleN(2). triangle is a standard Faust function.

Usage

triangle(freq) : _

Where:

  • freq: frequency

Filter-Based Oscillators

Filter-Based Oscillators

Usage

osc[b|r|rs|rc|s|w](f), where f = frequency in Hz.

References


(os.)oscb

Sinusoidal oscillator based on the biquad.

Usage

oscb(freq) : _

Where:

  • freq: frequency

(os.)oscrq

Sinusoidal (sine and cosine) oscillator based on 2D vector rotation, = undamped "coupled-form" resonator = lossless 2nd-order normalized ladder filter.

Usage

oscrq(freq) : _,_

Where:

  • freq: frequency

Reference


(os.)oscrs

Sinusoidal (sine) oscillator based on 2D vector rotation, = undamped "coupled-form" resonator = lossless 2nd-order normalized ladder filter.

Usage

oscrs(freq) : _

Where:

  • freq: frequency

Reference


(os.)oscrc

Sinusoidal (cosine) oscillator based on 2D vector rotation, = undamped "coupled-form" resonator = lossless 2nd-order normalized ladder filter.

Usage

oscrc(freq) : _

Where:

  • freq: frequency

Reference


(os.)oscs

Sinusoidal oscillator based on the state variable filter = undamped "modified-coupled-form" resonator = "magic circle" algorithm used in graphics.


(os.)osc

Default sine wave oscillator (same as oscsin). osc is a standard Faust function.

Usage

osc(freq) : _

Where:

  • freq: the frequency of the wave (Hz)

Waveguide-Resonator-Based Oscillators

Sinusoidal oscillator based on the waveguide resonator wgr.


(os.)oscw

Sinusoidal oscillator based on the waveguide resonator wgr. Unit-amplitude cosine oscillator.

Usage

oscwc(freq) : _

Where:

  • freq: frequency

Reference


(os.)oscws

Sinusoidal oscillator based on the waveguide resonator wgr. Unit-amplitude sine oscillator.

Usage

oscws(freq) : _

Where:

  • freq: frequency

Reference


(os.)oscwq

Sinusoidal oscillator based on the waveguide resonator wgr. Unit-amplitude cosine and sine (quadrature) oscillator.

Usage

oscwq(freq) : _

Where:

  • freq: frequency

Reference


(os.)oscw

Sinusoidal oscillator based on the waveguide resonator wgr. Unit-amplitude cosine oscillator (default).

Usage

oscw(freq) : _

Where:

  • freq: frequency

Reference

Casio CZ Oscillators

Oscillators that mimic some of the Casio CZ oscillators.

There are two sets: - A set with an index parameter - A set with a res parameter

The "index oscillators" outputs a sine wave at index=0 and gets brighter with a higher index. There are two versions of the "index oscillators": - with P appended to the name: is phase aligned with 'fund:sin' - without P appended to the name: has the phase of the original CZ oscillators

The "res oscillators" have a resonant frequency. "res" is the frequency of resonance as a factor of the fundamental pitch.


(os.)CZsaw

Oscillator that mimics the Casio CZ saw oscillator CZsaw is a standard Faust function.

Usage

CZsaw(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave

(os.)CZsawP

Oscillator that mimics the Casio CZ saw oscillator, with it's phase aligned to fund:sin. CZsawP is a standard Faust function.

Usage

CZsawP(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = saw-wave

(os.)CZsquare

Oscillator that mimics the Casio CZ square oscillator CZsquare is a standard Faust function.

Usage

CZsquare(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave

(os.)CZsquareP

Oscillator that mimics the Casio CZ square oscillator, with it's phase aligned to fund:sin. CZsquareP is a standard Faust function.

Usage

CZsquareP(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 to 1. 0 = sine-wave, 1 = square-wave

(os.)CZpulse

Oscillator that mimics the Casio CZ pulse oscillator CZpulse is a standard Faust function.

Usage

CZpulse(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse

(os.)CZpulseP

Oscillator that mimics the Casio CZ pulse oscillator, with it's phase aligned to fund:sin. CZpulseP is a standard Faust function.

Usage

CZpulseP(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 gives a sine-wave, 1 is closer to a pulse

(os.)CZsinePulse

Oscillator that mimics the Casio CZ sine/pulse oscillator CZsinePulse is a standard Faust function.

Usage

CZsinePulse(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse

(os.)CZsinePulseP

Oscillator that mimics the Casio CZ sine/pulse oscillator, with it's phase aligned to fund:sin. CZsinePulseP is a standard Faust function.

Usage

CZsinePulseP(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 gives a sine-wave, 1 is a sine minus a pulse

(os.)CZhalfSine

Oscillator that mimics the Casio CZ half sine oscillator CZhalfSine is a standard Faust function.

Usage

CZhalfSine(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square

(os.)CZhalfSineP

Oscillator that mimics the Casio CZ half sine oscillator, with it's phase aligned to fund:sin. CZhalfSineP is a standard Faust function.

Usage

CZhalfSineP(fund,index) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • index: the brightness of the oscillator, 0 gives a sine-wave, 1 is somewhere between a saw and a square

(os.)CZresSaw

Oscillator that mimics the Casio CZ resonant saw-tooth oscillator CZresSaw is a standard Faust function.

Usage

CZresSaw(fund,res) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • res: the frequency of resonance as a factor of the fundamental pitch.

(os.)CZresTriangle

Oscillator that mimics the Casio CZ resonant triangle oscillator CZresTriangle is a standard Faust function.

Usage

CZresTriangle(fund,res) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • res: the frequency of resonance as a factor of the fundamental pitch.

(os.)CZresTrap

Oscillator that mimics the Casio CZ resonant trapeze oscillator CZresTrap is a standard Faust function.

Usage

CZresTrap(fund,res) : _

Where:

  • fund: a saw-tooth waveform between 0 and 1 that the oscillator slaves to
  • res: the frequency of resonance as a factor of the fundamental pitch.

PolyBLEP-Based Oscillators


(os.)polyblep

PolyBLEP residual function - used for smoothing steps in the audio signal.

Usage

polyblep(Q, phase) : _

Where:

  • Q: smoothing factor between 0 and 0.5. Determines how far from the ends of the phase interval the quadratic function is used.
  • phase: normalised phase (between 0 and 1)

(os.)polyblep_saw

Sawtooth oscillator with suppressed aliasing (using polyBLEP).

Usage

polyblep_saw(f) : _

Where:

  • f: frequency in Hz

(os.)polyblep_square

Square wave oscillator with suppressed aliasing (using polyBLEP).

Usage

polyblep_square(f) : _

Where:

  • f: frequency in Hz

(os.)polyblep_triangle

Triangle wave oscillator with suppressed aliasing (using polyBLEP).

Usage

polyblep_triangle(f) : _

Where:

  • f: frequency in Hz

Filter-Based Oscillators


(os.)quadosc

Sinusoidal oscillator based on QuadOsc by Martin Vicanek.

Usage

quadosc(freq) : _

where

  • freq: frequency in Hz

Reference