1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
mod amplitude; pub use self::amplitude::Amplitude; mod iter; pub use self::iter::Iter; /// The trait for an audio generator. pub trait Generator { /// The sample that is generated. type Sample; /// Generate the next sample from the generator. Advances the underlying /// generator to the next sample. /// /// # Examples /// /// ```rust /// use audio_generator::{Generator, Sin}; /// /// let mut g = Sin::new(440.0, 44100.0); /// assert_eq!(g.sample(), 0.0); /// assert!(g.sample() > 0.0); /// ``` fn sample(&mut self) -> Self::Sample; /// Construct an iterator from this generator. /// /// ```rust /// use audio_generator::{Generator, Sin}; /// /// let mut g = Sin::new(440.0, 44100.0).amplitude(0.5); /// let samples = g.iter().take(10).collect::<Vec<f32>>(); /// /// assert_eq!(samples.len(), 10); /// ``` fn iter(self) -> Iter<Self> where Self: Sized, { Iter::new(self) } /// Modify the amplitude of the sample. /// /// # Examples /// /// ```rust /// use audio_generator::{Generator, Sin}; /// /// let mut a = Sin::new(440.0, 44100.0).amplitude(0.1); /// let mut b = Sin::new(440.0, 44100.0).amplitude(0.1); /// /// for _ in 0..100 { /// assert!(a.sample().abs() <= b.sample().abs()); /// } /// ``` fn amplitude(self, amplitude: f32) -> Amplitude<Self> where Self: Sized, { Amplitude::new(self, amplitude) } }