Crates.io | waver |
lib.rs | waver |
version | 0.2.0 |
source | src |
created_at | 2019-08-18 01:55:01.730131 |
updated_at | 2022-12-18 14:21:51.535627 |
description | waver: waveform generation library |
homepage | https://github.com/amrali/waver/ |
repository | |
max_upload_size | |
id | 157730 |
size | 40,144 |
Waver is a simple no-std library to generate any waveform of a given frequency, amplitude and phase.
A waveform can be a simple sinusoidal wave or a complex waveform of varying frequency and 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.
To use Waver, add the following to your Cargo.toml
file.
[dependencies]
waver = "0.1"
use std::{vec::Vec, f32::consts::PI};
use waver::{Waveform, Wave, WaveFunc};
fn main() {
// 44.1Khz sampling rate and 16-bit depth.
let mut wf = waver::Waveform::<i16>::new(44100.0);
// Superpose a sine wave, a cosine wave and a triangle function.
wf.superpose(Wave { frequency: 2600.0, ..Default::default() })
.superpose(Wave { frequency: 2600.0, phase: PI / 2.0, ..Default::default() })
.superpose(Wave { frequency: 2600.0, func: WaveFunc::Triangle, ..Default::default() })
.normalize_amplitudes();
// Quantization of 100 samples
let _output: Vec<i16> = wf.iter().take(100).collect();
}
Waveform
.Thought of something you'd like to see in Waver? You can visit the issue tracker to check if it was reported or proposed before, and if not please feel free to create an issue or feature request. Ready to start contributing? The contributing guide is a good place to start. If you have questions please feel free to ask.