use sdl3::audio::{AudioFormat, AudioSpec};
use std::time::Duration;
fn gen_wave(sample_count: i32) -> Vec<i16> {
let tone_volume = 1_000i16;
let period = 48_000 / 256;
let mut result = Vec::with_capacity(sample_count as usize);
for x in 0..sample_count {
result.push(if (x / period) % 2 == 0 {
tone_volume
} else {
-tone_volume
});
}
result
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let sdl_context = sdl3::init()?;
let audio_subsystem = sdl_context.audio()?;
let desired_spec = AudioSpec {
freq: Some(48_000),
channels: Some(2),
format: Some(AudioFormat::s16_sys()),
};
let device = audio_subsystem.open_playback_device(&desired_spec)?;
let stream = device.open_device_stream(Some(&desired_spec))?;
let target_samples = 48_000 * 2 * 2;
let wave = gen_wave(target_samples);
stream.put_data_i16(&wave)?;
stream.resume()?;
std::thread::sleep(Duration::from_millis(2_000));
Ok(())
}