pub struct PolyBlepOscillator { /* private fields */ }
Expand description

This is a band-limited oscillator based on the PolyBlep technique.

NOTE: You need to call crate::init_cos_tab.

Here is a quick example on how to use it:

 use synfx_dsp::{PolyBlepOscillator, rand_01, init_cos_tab};
 init_cos_tab();

 // Randomize the initial phase to make cancellation on summing less
 // likely:
 let mut osc =
     PolyBlepOscillator::new(rand_01() * 0.25);


 let freq   = 440.0; // Hz
 let israte = 1.0 / 44100.0; // Seconds per Sample
 let pw     = 0.2;   // Pulse-Width for the next_pulse()
 let waveform = 0;   // 0 being pulse in this example, 1 being sawtooth

 let mut block_of_samples = [0.0; 128];
 // in your process function:
 for output_sample in block_of_samples.iter_mut() {
    *output_sample =
        if waveform == 1 {
             osc.next_saw(freq, israte)
        } else {
             osc.next_pulse(freq, israte, pw)
        }
 }

Implementations

Create a new instance of PolyBlepOscillator.

  • init_phase - Initial phase of the oscillator. Range of this parameter is from 0.0 to 1.0. Passing a random value is advised for preventing phase cancellation when summing multiple oscillators.
 use synfx_dsp::*;

 let mut osc = PolyBlepOscillator::new(rand_01() * 0.25);

Reset the internal state of the oscillator as if you just called PolyBlepOscillator::new.

Creates the next sample of a sine wave.

  • freq - The frequency in Hz.
  • israte - The inverse sampling rate, or seconds per sample as in eg. 1.0 / 44100.0.
 use synfx_dsp::*;

 let mut osc = PolyBlepOscillator::new(rand_01() * 0.25);

 let freq   = 440.0; // Hz
 let israte = 1.0 / 44100.0; // Seconds per Sample

 // ...
 let sample = osc.next_sin(freq, israte);
 // ...

Creates the next sample of a triangle wave. Please note that the bandlimited waveform needs a few initial samples to swing in.

  • freq - The frequency in Hz.
  • israte - The inverse sampling rate, or seconds per sample as in eg. 1.0 / 44100.0.
 use synfx_dsp::*;

 let mut osc = PolyBlepOscillator::new(rand_01() * 0.25);

 let freq   = 440.0; // Hz
 let israte = 1.0 / 44100.0; // Seconds per Sample

 // ...
 let sample = osc.next_tri(freq, israte);
 // ...

Creates the next sample of a sawtooth wave.

  • freq - The frequency in Hz.
  • israte - The inverse sampling rate, or seconds per sample as in eg. 1.0 / 44100.0.
 use synfx_dsp::*;

 let mut osc = PolyBlepOscillator::new(rand_01() * 0.25);

 let freq   = 440.0; // Hz
 let israte = 1.0 / 44100.0; // Seconds per Sample

 // ...
 let sample = osc.next_saw(freq, israte);
 // ...

Creates the next sample of a pulse wave. In comparison to PolyBlepOscillator::next_pulse_no_dc this version is DC compensated, so that you may add multiple different pulse oscillators for a unison effect without too big DC issues.

  • freq - The frequency in Hz.
  • israte - The inverse sampling rate, or seconds per sample as in eg. 1.0 / 44100.0.
  • pw - The pulse width. Use the value 0.0 for a square wave.
 use synfx_dsp::*;

 let mut osc = PolyBlepOscillator::new(rand_01() * 0.25);

 let freq   = 440.0; // Hz
 let israte = 1.0 / 44100.0; // Seconds per Sample
 let pw     = 0.0; // 0.0 is a square wave.

 // ...
 let sample = osc.next_pulse(freq, israte, pw);
 // ...

Creates the next sample of a pulse wave. In comparison to PolyBlepOscillator::next_pulse this version is not DC compensated. So be careful when adding multiple of this or generally using it in an audio context.

  • freq - The frequency in Hz.
  • israte - The inverse sampling rate, or seconds per sample as in eg. 1.0 / 44100.0.
  • pw - The pulse width. Use the value 0.0 for a square wave.
 use synfx_dsp::*;

 let mut osc = PolyBlepOscillator::new(rand_01() * 0.25);

 let freq   = 440.0; // Hz
 let israte = 1.0 / 44100.0; // Seconds per Sample
 let pw     = 0.0; // 0.0 is a square wave.

 // ...
 let sample = osc.next_pulse_no_dc(freq, israte, pw);
 // ...

Trait Implementations

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.