dont need to choose 1 channel since downsampling should randomly choose from all

master
Bel LaPointe 2023-11-29 05:33:27 -07:00
parent 1dd631872c
commit 2936fec1e4
1 changed files with 5 additions and 7 deletions

View File

@ -50,21 +50,19 @@ fn main() {
.unwrap() .unwrap()
.with_max_sample_rate(); .with_max_sample_rate();
let channels = cfg.channels(); let downsample_ratio = cfg.channels() as f32 * (cfg.sample_rate().0 as f32 / 16000.0);
let downsample_ratio = cfg.sample_rate().0 as f32 / 16000.0;
let mut buffer = vec![]; let mut buffer = vec![];
let mut last = Instant::now(); let mut last = Instant::now();
let stream = device.build_input_stream( let stream = device.build_input_stream(
&cfg.clone().into(), &cfg.clone().into(),
move |data: &[f32], _: &cpal::InputCallbackInfo| { move |data: &[f32], _: &cpal::InputCallbackInfo| {
let mono_data: Vec<f32> = data.iter().map(|x| *x).step_by(channels.into()).collect();
let mut downsampled_data = vec![]; let mut downsampled_data = vec![];
for i in 0..(mono_data.len() as f32 / downsample_ratio) as usize { for i in 0..(data.len() as f32 / downsample_ratio) as usize {
let mut upsampled = i as f32 * downsample_ratio; let mut upsampled = i as f32 * downsample_ratio;
if upsampled > (mono_data.len()-1) as f32 { if upsampled > (data.len()-1) as f32 {
upsampled = (mono_data.len()-1) as f32 upsampled = (data.len()-1) as f32
} }
downsampled_data.push(mono_data[upsampled as usize]); downsampled_data.push(data[upsampled as usize]);
} }
downsampled_data.iter().for_each(|x| buffer.push(*x)); downsampled_data.iter().for_each(|x| buffer.push(*x));
if Instant::now() - last > stream_step { if Instant::now() - last > stream_step {