42 lines
1.0 KiB
Rust
42 lines
1.0 KiB
Rust
use cpal::{
|
|
traits::{DeviceTrait, HostTrait, StreamTrait},
|
|
Sample, StreamConfig,
|
|
};
|
|
use miette::miette;
|
|
use tracing::info;
|
|
|
|
use super::error::EleanorError;
|
|
|
|
pub fn init_audio() -> Result<StreamConfig, EleanorError> {
|
|
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)
|
|
}
|