binaural_beat_generator_cli/modules/frequency/
beat_frequency.rs

1//! A module that contains code related to the beat functionality.
2
3use crate::modules::frequency::frequency_common::ToFrequency;
4
5/// Represents common brainwave beat frequencies.
6#[derive(Debug, Clone, Copy, PartialEq)]
7pub enum BeatFrequency {
8    /// Delta wave range (0.5 - 4 Hz), for deep relaxation, sleep.
9    Delta,
10    /// Theta wave range (4 - 8 Hz), for meditation, creativity.
11    Theta,
12    /// Alpha wave range (8 - 12 Hz), for relaxation, focus.
13    Alpha,
14    /// Beta wave range (12 - 30 Hz), for alertness, concentration.
15    Beta,
16    /// Gamma wave range (30 - 100 Hz), for high-level cognitive processing.
17    Gamma,
18    /// Allows specifying a custom beat frequency in Hz.
19    Custom(f32),
20}
21
22/// This implementation conerts the BeatFrequency enum to a known or different and concrete frequency.
23impl ToFrequency for BeatFrequency {
24    fn to_hz(&self) -> f32 {
25        match self {
26            // Typical beat frequency for Delta, Theta, Alpha, Beta & Gamma
27            BeatFrequency::Delta => 2.0,
28            BeatFrequency::Theta => 6.0,
29            BeatFrequency::Alpha => 10.0,
30            BeatFrequency::Beta => 20.0,
31            BeatFrequency::Gamma => 40.0,
32            BeatFrequency::Custom(hz) => *hz,
33        }
34    }
35}
36
37#[cfg(test)]
38mod test {
39    use super::*;
40
41    macro_rules! test_beat_frequency_to_integer_cases {
42        ($($name:ident:($a:expr, $expected:expr),)*) => {
43            $(
44                #[test]
45                fn $name() {
46                    assert_eq!(BeatFrequency::to_hz($a),$expected)
47                }
48            )*
49        };
50    }
51
52    test_beat_frequency_to_integer_cases! {
53        test_beat_freuency_delta_enum_to_integer: (&BeatFrequency::Delta, 2.0),
54        test_beat_freuency_theta_enum_to_integer: (&BeatFrequency::Theta, 6.0),
55        test_beat_freuency_alpha_enum_to_integer: (&BeatFrequency::Alpha, 10.0),
56        test_beat_freuency_beta_enum_to_integer: (&BeatFrequency::Beta, 20.0),
57        test_beat_freuency_gamma_enum_to_integer: (&BeatFrequency::Gamma, 40.0),
58        test_beat_freuency_custom_enum_to_integer: (&BeatFrequency::Custom(99.9), 99.9),
59    }
60}