rs_audio/
waveform.rs

1use std::f64::consts::PI;
2
3/**
4This enum is used for declaring waveform types.<br><br>
5NOTE: Only the sine wave is currently implemented.
6*/
7#[derive(Clone, PartialEq)]
8pub enum WaveForm {
9    Sine,
10    Square,
11    Sawtooth,
12    Triangle,
13}
14
15// generates a sample using a waveform
16// only intended for use by the library
17pub fn generate_sample(waveform: &WaveForm, phase: f64) -> f64 {
18    match waveform {
19        // equations
20        WaveForm::Sine => (phase * 2.0 * PI).sin(),
21        WaveForm::Square => {
22            if phase < 0.5 {
23                1.0
24            } else {
25                -1.0
26            }
27        }
28        WaveForm::Sawtooth => 2.0 * phase - 1.0,
29        WaveForm::Triangle => {
30            if phase < 0.5 {
31                -1.0 + 4.0 * phase
32            } else {
33                1.0 - 4.0 * (phase - 0.5)
34            }
35        }
36    }
37}