Handy/src-tauri/src/audio_toolkit/audio/device.rs

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)
}