use audio_cpp::{Backend, ModelFamily, Registry, Request, RunMode, TaskKind};
fn main() -> Result<(), audio_cpp::Error> {
let args: Vec<String> = std::env::args().collect();
if args.len() < 3 {
eprintln!("用法: vad_offline <权重.safetensors> <input.wav> [family_hint]");
std::process::exit(1);
}
let model_path = &args[1];
let wav_path = &args[2];
let family_hint = args.get(3).map(String::as_str).map(ModelFamily::from);
let registry = Registry::new()?;
println!("模型族: {:?}", registry.families()?);
println!("设备: {:?}", Registry::devices()?);
let model = registry.load(model_path, family_hint.clone(), None)?;
println!("模型加载成功: {model_path} family_hint={family_hint:?}");
let session = model.create_task_session(
TaskKind::Vad,
RunMode::Offline,
Backend::Cpu,
0, 4, None,
)?;
println!(
"会话: family={} task={} mode={}",
session.family(),
session.task_kind(),
session.run_mode()
);
let threshold_key = if session.family() == "marblenet_vad" {
"threshold"
} else {
"vad_threshold"
};
let result = session.run_offline(Request::vad(wav_path).option(threshold_key, 0.5))?;
println!("=== 语音片段 ===");
for seg in &result.speech_segments {
println!(
" {}..{} 置信度={}",
seg.span.start_sample, seg.span.end_sample, seg.confidence
);
}
Ok(())
}