X-Git-Url: https://code.octet-stream.net/m17rt/blobdiff_plain/f5cbae9d09cc58d8b549c36111c7a57a16b9a822..c74046ba58c5fed4c1efc2a4e06ea12325d1d4cd:/m17codec2/src/rx.rs?ds=inline diff --git a/m17codec2/src/rx.rs b/m17codec2/src/rx.rs index 7c45610..5649519 100644 --- a/m17codec2/src/rx.rs +++ b/m17codec2/src/rx.rs @@ -62,6 +62,33 @@ impl Codec2RxAdapter { pub fn set_output_card>(&mut self, card_name: S) { self.output_card = Some(card_name.into()); } + + /// List sound cards supported for audio output. + /// + /// M17RT will handle any card with 1 or 2 channels and 16-bit output. + pub fn supported_output_cards() -> Vec { + let mut out = vec![]; + let host = cpal::default_host(); + let Ok(output_devices) = host.output_devices() else { + return out; + }; + for d in output_devices { + let Ok(mut configs) = d.supported_output_configs() else { + continue; + }; + if configs.any(|config| { + (config.channels() == 1 || config.channels() == 2) + && config.sample_format() == SampleFormat::I16 + }) { + let Ok(name) = d.name() else { + continue; + }; + out.push(name); + } + } + out.sort(); + out + } } impl Default for Codec2RxAdapter {