Eleanor/src/backend/playback.rs

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)
}