30 lines
797 B
Rust
30 lines
797 B
Rust
use cpal::traits::{DeviceTrait, HostTrait};
|
|
|
|
pub struct CpalDeviceInfo {
|
|
pub index: String,
|
|
pub name: String,
|
|
pub is_default: bool,
|
|
pub device: cpal::Device,
|
|
}
|
|
|
|
pub fn list_input_devices() -> Result<Vec<CpalDeviceInfo>, Box<dyn std::error::Error>> {
|
|
let host = cpal::default_host();
|
|
let default_name = host.default_input_device().and_then(|d| d.name().ok());
|
|
|
|
let mut out = Vec::<CpalDeviceInfo>::new();
|
|
|
|
for (index, device) in host.input_devices()?.enumerate() {
|
|
let name = device.name().unwrap_or_else(|_| "Unknown".into());
|
|
|
|
let is_default = Some(name.clone()) == default_name;
|
|
|
|
out.push(CpalDeviceInfo {
|
|
index: index.to_string(),
|
|
name,
|
|
is_default,
|
|
device,
|
|
});
|
|
}
|
|
|
|
Ok(out)
|
|
}
|