use ringbuf::{Consumer, Producer}; use utils::buffers::*; use utils::pitch::*; use crate::BUFFER_LEN; pub struct ProcessorInput { pub(crate) buffers: Buffers, pub(crate) sample_rate: u32, } pub struct ProcessorOutput { pub(crate) buffers: Buffers, pub(crate) pitch_l: Option, pub(crate) pitch_r: Option, } pub fn tuna(mut inputs: Consumer, mut outputs: Producer) { let mut detector_l = generate_pitch_detector(BUFFER_LEN); let mut detector_r = generate_pitch_detector(BUFFER_LEN); loop { if let Some(ProcessorInput { buffers, sample_rate, }) = inputs.pop() { let pitch_l = pitch_detect(&mut detector_l, &buffers.l, sample_rate).map(|a| a.0); let pitch_r = pitch_detect(&mut detector_r, &buffers.r, sample_rate).map(|a| a.0); let _ = outputs.push(ProcessorOutput { buffers, pitch_l, pitch_r, }); } } }