diff --git a/src/amdemod.rs b/src/amdemod.rs index 359311e..ac6152e 100644 --- a/src/amdemod.rs +++ b/src/amdemod.rs @@ -1,9 +1,12 @@ pub struct SquaringAMDemodulator<'a> { - iterator: Box + 'a>, + iterator: Box + 'a>, } impl<'a> SquaringAMDemodulator<'a> { - pub fn from(iterator1: I) -> SquaringAMDemodulator<'a> where I: Iterator + 'a { + pub fn from(iterator1: I) -> SquaringAMDemodulator<'a> + where + I: Iterator + 'a, + { SquaringAMDemodulator { iterator: Box::new(iterator1), } @@ -16,7 +19,7 @@ impl<'a> Iterator for SquaringAMDemodulator<'a> { fn next(&mut self) -> Option { match self.iterator.next() { Some(x) => Some((x * x).sqrt()), - None => None + None => None, } } } diff --git a/src/aptsyncer.rs b/src/aptsyncer.rs index 11a0a33..62832a8 100644 --- a/src/aptsyncer.rs +++ b/src/aptsyncer.rs @@ -1,51 +1,49 @@ -const SYNC_LENGHT : usize = 40; -const SYNCA_SEQ : [bool; 40] = [false, false, false, false, - true, true, false, false, // Pulse 1 - true, true, false, false, // Pulse 2 - true, true, false, false, // Pulse 3 - true, true, false, false, // Pulse 4 - true, true, false, false, // Pulse 5 - true, true, false, false, // Pulse 6 - true, true, false, false, // Pulse 7 - false, false, false, false, - false, false, false, false,]; - -const SYNCB_SEQ : [bool; 40] = [false, false, false, false, - true, true, true, false, false, - true, true, true, false, false, - true, true, true, false, false, - true, true, true, false, false, - true, true, true, false, false, - true, true, true, false, false, - true, true, true, false, false, - false]; +const SYNC_LENGHT: usize = 40; +const SYNCA_SEQ: [bool; 40] = [ + false, false, false, false, true, true, false, false, // Pulse 1 + true, true, false, false, // Pulse 2 + true, true, false, false, // Pulse 3 + true, true, false, false, // Pulse 4 + true, true, false, false, // Pulse 5 + true, true, false, false, // Pulse 6 + true, true, false, false, // Pulse 7 + false, false, false, false, false, false, false, false, +]; +const SYNCB_SEQ: [bool; 40] = [ + false, false, false, false, true, true, true, false, false, true, true, true, false, false, + true, true, true, false, false, true, true, true, false, false, true, true, true, false, false, + true, true, true, false, false, true, true, true, false, false, false, +]; pub enum SyncedSample { Sample(f32), SyncA(f32), - SyncB(f32) + SyncB(f32), } pub struct APTSyncer<'a> { state: [f32; SYNC_LENGHT], - pos : usize, + pos: usize, nones_read: usize, - avg_level : f32, - iterator: Box + 'a> + avg_level: f32, + iterator: Box + 'a>, } impl<'a> APTSyncer<'a> { - pub fn from(mut iterator: I) -> APTSyncer<'a> where I: Iterator + 'a { + pub fn from(mut iterator: I) -> APTSyncer<'a> + where + I: Iterator + 'a, + { let mut state = [0.0; SYNC_LENGHT]; let mut avg_level = 0.5; for i in 0..SYNC_LENGHT { match iterator.next() { Some(x) => { - state[i] = x; - avg_level = 0.25 * x + avg_level * 0.75; - }, - None => panic!("Could not retrieve enough samples to prime syncer") + state[i] = x; + avg_level = 0.25 * x + avg_level * 0.75; + } + None => panic!("Could not retrieve enough samples to prime syncer"), } } @@ -54,7 +52,7 @@ impl<'a> APTSyncer<'a> { pos: 0, nones_read: 0, avg_level: avg_level, - iterator: Box::new(iterator) + iterator: Box::new(iterator), } } @@ -87,16 +85,15 @@ impl<'a> Iterator for APTSyncer<'a> { type Item = SyncedSample; fn next(&mut self) -> Option { - let (is_a, is_b) = self.is_marker(); let sample = self.state[self.pos]; match self.iterator.next() { Some(x) => { - self.state[self.pos] = x; - self.avg_level = 0.25 * x + self.avg_level * 0.75; - }, - None => self.nones_read += 1 + self.state[self.pos] = x; + self.avg_level = 0.25 * x + self.avg_level * 0.75; + } + None => self.nones_read += 1, }; if self.nones_read >= SYNC_LENGHT { @@ -107,11 +104,9 @@ impl<'a> Iterator for APTSyncer<'a> { if is_a { return Some(SyncedSample::SyncA(sample)); - } - else if is_b { + } else if is_b { return Some(SyncedSample::SyncB(sample)); - } - else { + } else { return Some(SyncedSample::Sample(sample)); } } diff --git a/src/errors.rs b/src/errors.rs index a8124c8..40cc933 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -12,7 +12,4 @@ pub enum DecoderError { #[error("Unable to write output file: {0}")] OutputFileError(#[from] image::ImageError), - - #[error("FIXME: Unknown decoder error")] - Unknown, } diff --git a/src/firfilter.rs b/src/firfilter.rs index 97f59a6..39baae9 100644 --- a/src/firfilter.rs +++ b/src/firfilter.rs @@ -2,11 +2,14 @@ pub struct FIRFilter<'a> { coeffs: &'a [f32], state: Vec, pos: usize, - iterator: Box + 'a> + iterator: Box + 'a>, } impl<'a> FIRFilter<'a> { - pub fn from(iterator: I, coeffs: &'a [f32]) -> FIRFilter<'a> where I: Iterator + 'a { + pub fn from(iterator: I, coeffs: &'a [f32]) -> FIRFilter<'a> + where + I: Iterator + 'a, + { let mut state = Vec::new(); for _ in 0..coeffs.len() { state.push(0.0); @@ -16,7 +19,7 @@ impl<'a> FIRFilter<'a> { coeffs: coeffs, state: state, pos: 0, - iterator: Box::new(iterator) + iterator: Box::new(iterator), } } } @@ -27,7 +30,7 @@ impl<'a> Iterator for FIRFilter<'a> { fn next(&mut self) -> Option { let cur = match self.iterator.next() { Some(x) => x, - None => return None + None => return None, }; self.pos = (self.pos + 1) % self.coeffs.len(); @@ -37,7 +40,7 @@ impl<'a> Iterator for FIRFilter<'a> { for i in 0..self.coeffs.len() { let pos = (self.pos + self.coeffs.len() - i) % self.coeffs.len(); result += self.state[pos] * self.coeffs[i]; - }; + } Some(result) } diff --git a/src/resamplers.rs b/src/resamplers.rs index 8a79ac4..99cd050 100644 --- a/src/resamplers.rs +++ b/src/resamplers.rs @@ -1,15 +1,18 @@ pub struct Upsampler<'a> { factor: u16, state: u16, - iterator: Box + 'a> + iterator: Box + 'a>, } impl<'a> Upsampler<'a> { - pub fn from(iterator: I, factor: u16) -> Upsampler<'a> where I: Iterator + 'a { + pub fn from(iterator: I, factor: u16) -> Upsampler<'a> + where + I: Iterator + 'a, + { Upsampler { factor: factor, state: 0, - iterator: Box::new(iterator) + iterator: Box::new(iterator), } } } @@ -20,8 +23,7 @@ impl<'a> Iterator for Upsampler<'a> { fn next(&mut self) -> Option { let result = if self.state == 0 { self.iterator.next() - } - else { + } else { Some(0.0) }; self.state = (self.state + 1) % self.factor; @@ -30,18 +32,19 @@ impl<'a> Iterator for Upsampler<'a> { } } - - pub struct Downsampler<'a> { - factor: u16, - iterator: Box + 'a> + factor: u16, + iterator: Box + 'a>, } impl<'a> Downsampler<'a> { - pub fn from(iterator: I, factor: u16) -> Downsampler<'a> where I: Iterator + 'a { + pub fn from(iterator: I, factor: u16) -> Downsampler<'a> + where + I: Iterator + 'a, + { Downsampler { factor: factor, - iterator: Box::new(iterator) + iterator: Box::new(iterator), } } } @@ -54,7 +57,7 @@ impl<'a> Iterator for Downsampler<'a> { for _ in 0..self.factor { match self.iterator.next() { Some(x) => result += x, - None => return None + None => return None, } } result /= self.factor as f32; diff --git a/src/utils.rs b/src/utils.rs index 3301ac1..b828a5f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -6,7 +6,7 @@ type FileReader = std::io::BufReader; pub fn float_sample_iterator<'a>( reader: &'a mut hound::WavReader, -) -> Box + 'a> { +) -> Box + 'a> { match reader.spec().sample_format { hound::SampleFormat::Float => Box::new(reader.samples::().map(|x| x.unwrap())), hound::SampleFormat::Int => match reader.spec().bits_per_sample {