rs_audio/
waveform.rs

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