use audio_core::ReadBuf; use audio_core::Translate as _; use audio_device::alsa; use audio_generator::{self as gen, Generator as _}; fn generate_audio() -> anyhow::Result<()> { let mut pcm = alsa::Pcm::open_default(alsa::Stream::Playback)?; let config = pcm.configure::<i16>().install()?; let mut writer = pcm.writer::<i16>()?; dbg!(config); let sample_rate = config.rate as f32; let channels = config.channels as usize; let mut a = gen::Sine::new(261.63, sample_rate); let mut b = gen::Sine::new(329.63, sample_rate); let mut c = gen::Sine::new(440.00, sample_rate); let mut buf = [0i16; 16 * 1024]; loop { for o in (0..buf.len()).step_by(channels) { let s = i16::translate((a.sample() + b.sample() + c.sample()) * 0.01); for c in 0..channels { buf[o + c] = s; } } let mut buf = audio::wrap::interleaved(&buf[..], channels); while buf.has_remaining() { writer.write_interleaved(&mut buf)?; } } } fn main() -> anyhow::Result<()> { let bg = ste::spawn(); bg.submit(generate_audio)?; bg.join(); Ok(()) }