euphony_units/pitch/
frequency.rs

1use core::ops::Mul;
2
3new_ratio!(BaseFrequency, u64);
4
5#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
6pub struct Frequency(pub f64);
7
8impl From<BaseFrequency> for Frequency {
9    #[inline]
10    fn from(freq: BaseFrequency) -> Self {
11        Self(freq.as_f64())
12    }
13}
14
15impl From<Frequency> for f64 {
16    #[inline]
17    fn from(freq: Frequency) -> Self {
18        freq.0
19    }
20}
21
22impl From<f64> for Frequency {
23    #[inline]
24    fn from(freq: f64) -> Self {
25        Self(freq)
26    }
27}
28
29impl From<u64> for Frequency {
30    #[inline]
31    fn from(freq: u64) -> Self {
32        Self(freq as _)
33    }
34}
35
36impl Mul<BaseFrequency> for FrequencyRatio {
37    type Output = Frequency;
38
39    #[inline]
40    fn mul(self, rhs: BaseFrequency) -> Self::Output {
41        Frequency((self * rhs.as_ratio()).as_f64())
42    }
43}
44
45impl Mul<FrequencyRatio> for BaseFrequency {
46    type Output = Frequency;
47
48    #[inline]
49    fn mul(self, rhs: FrequencyRatio) -> Self::Output {
50        Frequency((self * rhs.as_ratio()).as_f64())
51    }
52}
53
54impl Mul<f64> for BaseFrequency {
55    type Output = Frequency;
56
57    #[inline]
58    fn mul(self, rhs: f64) -> Self::Output {
59        Frequency(self.as_f64() * rhs)
60    }
61}
62
63impl Mul<f64> for Frequency {
64    type Output = Frequency;
65
66    #[inline]
67    fn mul(self, rhs: f64) -> Self::Output {
68        Frequency(self.0 * rhs)
69    }
70}
71
72impl Mul<Frequency> for f64 {
73    type Output = Frequency;
74
75    #[inline]
76    fn mul(self, rhs: Frequency) -> Self::Output {
77        Frequency(self * rhs.0)
78    }
79}
80
81impl Mul<Frequency> for Frequency {
82    type Output = Frequency;
83
84    #[inline]
85    fn mul(self, rhs: Frequency) -> Self::Output {
86        Frequency(self.0 * rhs.0)
87    }
88}
89
90impl Mul<BaseFrequency> for f64 {
91    type Output = Frequency;
92
93    #[inline]
94    fn mul(self, rhs: BaseFrequency) -> Self::Output {
95        Frequency(rhs.as_f64() * self)
96    }
97}
98
99new_ratio!(FrequencyRatio, u64);