7 unstable releases (3 breaking)
0.4.1 | Jan 2, 2023 |
---|---|
0.4.0 | Dec 29, 2022 |
0.3.0 | Dec 9, 2022 |
0.2.2 | Jul 22, 2022 |
0.1.0 | Jun 29, 2022 |
#729 in Audio
233 downloads per month
180KB
484 lines
wavegen
wavegen
is a wavefrom generator made with 🦀
How to use it?
- Add
wavegen
to your project:
[dependencies]
wavegen = "0.4"
Or, to use the no_std version (custom global allocator is required):
[dependencies]
wavegen = { version = "0.4", default-features = false, features = ["libm"] }
- Define a waveform with sampling frequency and function components:
let waveform = wf!(f64, 200., sine!(frequency: 100., amplitude: 10.), dc_bias!(20.));
- Turn it into an iterator and sample:
let some_samples: Vec<f64> = waveform.iter().take(200).collect();
Refer to documentation for more exhaustive usage examples.
Show me some examples!
Interactive demo
Check out the demo at https://wavegen-demo.netlify.app
Plot charts
- Simple sine
- Two superposed phase-shifted sines
- "Real life" example: 300Hz sine signal with 50Hz interference noise
- Sawtooth
- Superposition of sine + sawtooth
- Square wave
- Superposition of Sine, Square and Sawtooth with different frequencies
All above examples are generated with simple program found in examples/plot.rs
. Run cargo run --example plot
to generate them yourself.
MSRV
The Minimum Supported Rust Version is 1.60
.
Similar crates
- Waver which was the inspiration for this crate
Breaking changes
0.2
- Braking change in how macros are annotated, changing the annotation form from
frequency = n
tofrequency: n
0.4
Waveform::get_sample_rate
renamed toWaveform::sample_rate
and now returns a borrowed values, as per rust API specs.Waveform::get_components_len
removed. The functionality can be achieved by a new getterWaveform::components
.