euphony_units/pitch/
frequency.rs1use 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);