use cpal::{ traits::{DeviceTrait, HostTrait, StreamTrait}, Sample, StreamConfig, }; use miette::miette; use tracing::info; use super::error::EleanorError; pub fn init_audio() -> Result { let host = cpal::default_host(); let device = host.default_output_device().ok_or( miette!("Failed to initialize audio output").context("No output device is available"), )?; let output_cfg: StreamConfig = device.default_output_config()?.into(); info!( "Starting audio output stream... (Sample Rate: {}Hz, Channels: {})", &output_cfg.sample_rate.0, &output_cfg.channels ); let stream = device .build_output_stream( &output_cfg, move |data: &mut [f32], _: &cpal::OutputCallbackInfo| { for sample in data.iter_mut() { *sample = Sample::EQUILIBRIUM; } }, move |_err| {}, None, ) .unwrap(); stream.play().unwrap(); loop {} Ok(output_cfg) }