use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use std::sync::{Arc, Mutex}; pub fn play_audio(signal: &[f32]) -> Result<(), Box> { let host = cpal::default_host(); let device = host.default_output_device().ok_or("No output device found")?; let config = device.default_output_config()?.config(); let signal = Arc::new(Mutex::new(signal.to_vec())); let singal_clone = Arc::clone(&signal); let mut index = 0; let stream = device.build_output_stream( &config, move |data: &mut [f32], _: &cpal::OutputCallbackInfo| { let signal = singal_clone.lock().unwrap(); for sample in data.iter_mut() { *sample = if index < signal.len() { signal[index] } else { 0.0 }; index += 1; } }, |err| eprintln!("Error: {:?}", err), None )?; stream.play()?; std::thread::sleep(std::time::Duration::from_secs(1)); Ok(()) }