binaural_beat_generator_cli/modules/frequency/
carrier_frequency.rs

1//! A module that contains code related to the carrier functionality.
2
3use crate::modules::frequency::frequency_common::ToFrequency;
4
5/// Represents common brainwave carrier frequencies.
6#[derive(Debug, Clone, Copy, PartialEq)]
7pub enum CarrierFrequency {
8    /// Delta wave range (0.5 - 4 Hz), often associated with deep sleep.
9    Delta,
10    /// Theta wave range (4 - 8 Hz), associated with meditation, relaxation, and creativity.
11    Theta,
12    /// Alpha wave range (8 - 12 Hz), associated with relaxed, yet alert states.
13    Alpha,
14    /// Beta wave range (12 - 30 Hz), associated with active, busy, or anxious thinking.
15    Beta,
16    /// Gamma wave range (30 - 100 Hz), associated with higher-level cognitive functions.
17    Gamma,
18
19    SolfeggioRoot,
20    SolfeggioSacral,
21    SolfeggioSolarPlexus,
22    SolfeggioHeart,
23    SolfeggioThroat,
24    SolfeggioThirdEye,
25    SolfeggioCrown,
26
27    TuningForkRoot,
28    TuningForkSacral,
29    TuningForkSolarPlexus,
30    TuningForkHeart,
31    TuningForkThroat,
32    TuningForkThirdEye,
33    TuningForkCrown,
34
35    /// Allows specifying a custom carrier frequency in Hz.
36    Custom(f32),
37}
38
39impl ToFrequency for CarrierFrequency {
40    fn to_hz(&self) -> f32 {
41        match self {
42            CarrierFrequency::Delta => 100.0, // Example base for Delta, often higher than beat freq
43            CarrierFrequency::Theta => 200.0,
44            CarrierFrequency::Alpha => 300.0,
45            CarrierFrequency::Beta => 400.0,
46            CarrierFrequency::Gamma => 500.0,
47
48            // Solfeggio Tones
49            CarrierFrequency::SolfeggioRoot => 396.0,
50            CarrierFrequency::SolfeggioSacral => 417.0,
51            CarrierFrequency::SolfeggioSolarPlexus => 528.0,
52            CarrierFrequency::SolfeggioHeart => 639.0,
53            CarrierFrequency::SolfeggioThroat => 741.0,
54            CarrierFrequency::SolfeggioThirdEye => 852.0,
55            CarrierFrequency::SolfeggioCrown => 963.0,
56
57            // Planetary/Tuning Fork Tones
58            CarrierFrequency::TuningForkRoot => 194.18,
59            CarrierFrequency::TuningForkSacral => 210.42,
60            CarrierFrequency::TuningForkSolarPlexus => 126.22,
61            CarrierFrequency::TuningForkHeart => 136.10,
62            CarrierFrequency::TuningForkThroat => 141.27,
63            CarrierFrequency::TuningForkThirdEye => 221.23,
64            CarrierFrequency::TuningForkCrown => 172.06,
65
66            CarrierFrequency::Custom(hz) => *hz,
67        }
68    }
69}
70
71#[cfg(test)]
72mod test {
73    use super::*;
74
75    macro_rules! test_carrier_frequency_to_integer_cases {
76        ($($name:ident:($a:expr, $expected:expr),)*) => {
77            $(
78                #[test]
79                fn $name() {
80                    assert_eq!(CarrierFrequency::to_hz($a),$expected)
81                }
82            )*
83        };
84    }
85
86    test_carrier_frequency_to_integer_cases! {
87        test_carrier_frequency_delta_enum_to_integer: (&CarrierFrequency::Delta, 100.0),
88        test_carrier_frequency_theta_enum_to_integer: (&CarrierFrequency::Theta , 200.0),
89        test_carrier_frequency_alpha_enum_to_integer: (&CarrierFrequency::Alpha , 300.0),
90        test_carrier_frequency_beta_enum_to_integer: (&CarrierFrequency::Beta , 400.0),
91        test_carrier_frequency_gamma_enum_to_integer: (&CarrierFrequency::Gamma , 500.0),
92
93        test_carrier_frequency_solfeggio_root_enum_to_integer: (&CarrierFrequency::SolfeggioRoot , 396.0),
94        test_carrier_frequency_solfeggio_sacral_enum_to_integer: (&CarrierFrequency::SolfeggioSacral , 417.0),
95        test_carrier_frequency_solfeggio_solar_plexus_enum_to_integer: (&CarrierFrequency::SolfeggioSolarPlexus , 528.0),
96        test_carrier_frequency_solfeggio_heart_enum_to_integer: (&CarrierFrequency::SolfeggioHeart , 639.0),
97        test_carrier_frequency_solfeggio_throat_enum_to_integer: (&CarrierFrequency::SolfeggioThroat , 741.0),
98        test_carrier_frequency_solfeggio_third_eye_enum_to_integer: (&CarrierFrequency::SolfeggioThirdEye , 852.0),
99        test_carrier_frequency_solfeggio_crown_enum_to_integer: (&CarrierFrequency::SolfeggioCrown , 963.0),
100
101        test_carrier_frequency_tuning_fork_root_enum_to_integer: (&CarrierFrequency::TuningForkRoot , 194.18),
102        test_carrier_frequency_tuning_fork_sacral_enum_to_integer: (&CarrierFrequency::TuningForkSacral , 210.42),
103        test_carrier_frequency_tuning_fork_solar_plexus_enum_to_integer: (&CarrierFrequency::TuningForkSolarPlexus , 126.22),
104        test_carrier_frequency_tuning_fork_heart_enum_to_integer: (&CarrierFrequency::TuningForkHeart , 136.10),
105        test_carrier_frequency_tuning_fork_throat_enum_to_integer: (&CarrierFrequency::TuningForkThroat , 141.27),
106        test_carrier_frequency_tuning_fork_third_eye_enum_to_integer: (&CarrierFrequency::TuningForkThirdEye , 221.23),
107        test_carrier_frequency_tuning_fork_crown_enum_to_integer: (&CarrierFrequency::TuningForkCrown , 172.06),
108        test_carrier_frequency_custom_enum_to_integer: (&CarrierFrequency::Custom(199.99) , 199.99),
109
110    }
111}