From 4c80247ab967fd982be5b5fe7e1ffc4eab313aad Mon Sep 17 00:00:00 2001 From: bel Date: Wed, 3 Jan 2024 17:18:07 -0700 Subject: [PATCH] accept lower sample rates if 16k not avail --- listen-lib/src/lib.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/listen-lib/src/lib.rs b/listen-lib/src/lib.rs index 05ac1e2..d3f2519 100644 --- a/listen-lib/src/lib.rs +++ b/listen-lib/src/lib.rs @@ -96,13 +96,22 @@ impl Listener { filter(|device| device.name().unwrap() == self.device_name). collect::>(); let device = devices.first().unwrap(); - let cfg = device.supported_input_configs() + let mut sample_rate = 15_500; + let mut cfgs: Vec<_> = device.supported_input_configs() .unwrap() .filter(|x| x.sample_format() == cpal::SampleFormat::F32) - .filter(|x| x.min_sample_rate() >= cpal::SampleRate(15_500)) - .nth(0) - .unwrap() - .with_max_sample_rate(); + .filter(|x| x.min_sample_rate() >= cpal::SampleRate(sample_rate)) + .collect(); + while cfgs.len() == 0 && sample_rate > 0 { + sample_rate /= 2; + cfgs = device.supported_input_configs() + .unwrap() + .filter(|x| x.sample_format() == cpal::SampleFormat::F32) + .filter(|x| x.min_sample_rate() >= cpal::SampleRate(sample_rate)) + .collect(); + } + assert!(cfgs.len() > 0); + let cfg = cfgs[0].clone().with_max_sample_rate(); let downsample_ratio = cfg.channels() as f32 * (cfg.sample_rate().0 as f32 / 16_000.0); let stream = device.build_input_stream(