extern crate sdl2;
use sdl2::audio::{AudioCallback, AudioDevice, AudioSpecDesired};
struct SquareWave {
phase_inc: f32,
phase: f32,
volume: f32
}
impl AudioCallback for SquareWave {
type Channel = f32;
fn callback(&mut self, out: &mut [f32]) {
for x in out.iter_mut() {
*x = match self.phase {
0.0...0.5 => self.volume,
_ => -self.volume
};
self.phase = (self.phase + self.phase_inc) % 1.0;
}
}
}
fn main() {
let _sdl_context = sdl2::init().audio().unwrap();
let desired_spec = AudioSpecDesired {
freq: Some(44100),
channels: Some(1), samples: None };
let device = AudioDevice::open_playback(None, desired_spec, |spec| {
println!("{:?}", spec);
SquareWave {
phase_inc: 440.0 / spec.freq as f32,
phase: 0.0,
volume: 0.25
}
}).unwrap();
device.resume();
sdl2::timer::delay(2000);
}