rodio/source/
sine.rs
1use std::time::Duration;
2
3use crate::source::{Function, SignalGenerator};
4use crate::Source;
5
6use super::SeekError;
7
8#[derive(Clone, Debug)]
12pub struct SineWave {
13 test_sine: SignalGenerator,
14}
15
16impl SineWave {
17 const SAMPLE_RATE: u32 = 48000;
18
19 #[inline]
21 pub fn new(freq: f32) -> SineWave {
22 let sr = cpal::SampleRate(Self::SAMPLE_RATE);
23 SineWave {
24 test_sine: SignalGenerator::new(sr, freq, Function::Sine),
25 }
26 }
27}
28
29impl Iterator for SineWave {
30 type Item = f32;
31
32 #[inline]
33 fn next(&mut self) -> Option<f32> {
34 self.test_sine.next()
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 Self::SAMPLE_RATE
52 }
53
54 #[inline]
55 fn total_duration(&self) -> Option<Duration> {
56 None
57 }
58
59 #[inline]
63 fn try_seek(&mut self, _: Duration) -> Result<(), SeekError> {
64 Ok(())
65 }
66}