fn main() {
let sample_rate = 48_000u32;
let channels = 1u16; let duration_secs = 2u32;
let total_samples = sample_rate as usize * channels as usize * duration_secs as usize;
println!("Capturing {duration_secs}s of audio at {sample_rate} Hz mono...");
let config = oxisound::StreamConfig {
channels,
..oxisound::StreamConfig::STEREO_48K
};
let mut input = match oxisound::open_input(config) {
Ok(i) => i,
Err(e) => {
println!("Failed to open input: {e}");
return;
}
};
let mut samples = Vec::with_capacity(total_samples);
let mut chunk = vec![0.0f32; 1024];
while samples.len() < total_samples {
match input.read(&mut chunk) {
Ok(n) => samples.extend_from_slice(&chunk[..n]),
Err(e) => {
println!("Capture error: {e}");
return;
}
}
std::thread::sleep(std::time::Duration::from_millis(5));
}
samples.truncate(total_samples);
println!("Captured {} samples. Encoding to WAV...", samples.len());
let audio_buf = oxiaudio::AudioBuffer {
samples,
sample_rate,
channels: oxiaudio::ChannelLayout::Mono,
format: oxiaudio::SampleFormat::F32,
};
let out_path = std::env::temp_dir().join("oxisound_capture.wav");
match oxiaudio::encode_wav(&audio_buf, &out_path) {
Ok(()) => println!("Saved to: {}", out_path.display()),
Err(e) => println!("Encode error: {e}"),
}
}