geng_rodio/source/
sine.rs1use std::f32::consts::PI;
2use std::time::Duration;
3
4use crate::Source;
5
6#[derive(Clone, Debug)]
10pub struct SineWave {
11 freq: f32,
12 num_sample: usize,
13}
14
15impl SineWave {
16 #[inline]
18 pub fn new(freq: f32) -> SineWave {
19 SineWave {
20 freq: freq,
21 num_sample: 0,
22 }
23 }
24}
25
26impl Iterator for SineWave {
27 type Item = f32;
28
29 #[inline]
30 fn next(&mut self) -> Option<f32> {
31 self.num_sample = self.num_sample.wrapping_add(1);
32
33 let value = 2.0 * PI * self.freq * self.num_sample as f32 / 48000.0;
34 Some(value.sin())
35 }
36}
37
38impl Source for SineWave {
39 #[inline]
40 fn current_frame_len(&self) -> Option<usize> {
41 None
42 }
43
44 #[inline]
45 fn channels(&self) -> u16 {
46 1
47 }
48
49 #[inline]
50 fn sample_rate(&self) -> u32 {
51 48000
52 }
53
54 #[inline]
55 fn total_duration(&self) -> Option<Duration> {
56 None
57 }
58}