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 sizefreq
: 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 sizefreq
: 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 sizefreq
: 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 phasorc
: 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 Hzduty
: 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 Hzduty
: 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
: phasefreq
: 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
: frequencyreset
: 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
: frequencyphase
: phase between 0 and 1reset
: 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
- Kleimola, J.; Valimaki, V., "Reducing Aliasing from Synthetic Audio Signals Using Polynomial Transition Regions," in Signal Processing Letters, IEEE , vol.19, no.2, pp.67-70, Feb. 2012
- https://aaltodoc.aalto.fi/bitstream/handle/123456789/7747/publication6.pdf?sequence=9
- http://research.spa.aalto.fi/publications/papers/spl-ptr/
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 orderfreq
: frequency in Hzphase
: 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 orderfreq
: 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
: frequencyduty
: 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
- http://lac.linuxaudio.org/2012/download/lac12-slides-jos.pdf
- https://ccrma.stanford.edu/~jos/pdf/lac12-paper-jos.pdf
(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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 toindex
: 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 tores
: 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 tores
: 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 tores
: 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