[][src]Crate waver

Waver: waveform generation library

A waveform can be the fundamental sinusoidal wave or a complex waveform of varying frequency, phase shift or amplitude. Waver is useful where there's a need to generate a simple sinusoidal sound wave or for constructing a frequency or amplitude modulated carrier wave in bare-metal Arduino or a Raspberry Pi.


  • Arbitrary quantization levels. Specify the bit depth when constructing Waveform.
  • Online wave generation. No buffers, infinite iterators.
  • Wave superposition with weighted amplitudes.
  • Modulate signal's frequency, amplitude or phase.
  • Numerically stable, prevents clipping.


use std::{vec::Vec, f32::consts::PI};
use waver::{Waveform, Wave};

fn main() {
  // 44.1Khz sampling rate and 16-bit depth.
  let mut wf = waver::Waveform::<i16>::new(44100.0);

  // Superpose a sine wave and a cosine wave.
  wf.superpose(Wave { frequency: 2600.0, ..Default::default() })
    .superpose(Wave { frequency: 2600.0, phase: PI / 2.0, ..Default::default() })

  // Quantization of 100 samples
  let _output: Vec<i16> = wf.iter().take(100).collect();



A structure that represent a sinusoidal wave.


Iterator for Wave structure.


A structure that represent a waveform.


Iterator for Waveform structure.