Skip to content

Instantly share code, notes, and snippets.

@seemk
Created July 25, 2014 20:45
Show Gist options
  • Save seemk/1f68b23b3759f7d9d780 to your computer and use it in GitHub Desktop.
Save seemk/1f68b23b3759f7d9d780 to your computer and use it in GitHub Desktop.
AudioSpec lifetimes
extern crate sdl2;
pub fn main() {
sdl2::init(sdl2::InitVideo);
sdl2::init(sdl2::InitAudio);
let window = match sdl2::video::Window::new("rust-sdl2 demo: Video", sdl2::video::PosCentered, sdl2::video::PosCentered, 800, 600, sdl2::video::OpenGL) {
Ok(window) => window,
Err(err) => fail!(format!("failed to create window: {}", err))
};
let renderer = match sdl2::render::Renderer::from_window(window, sdl2::render::DriverAuto, sdl2::render::Accelerated) {
Ok(renderer) => renderer,
Err(err) => fail!(format!("failed to create renderer: {}", err))
};
let path = std::os::self_exe_path().unwrap().join("Noise.wav");
let audio_cb = |data: &mut [u8]| { println!("Audio callback. Buf len: {}", data.len()) };
let mut audio_spec = match sdl2::audio::AudioSpec::load_wav(&path) {
Ok((spec, _)) => {
spec
},
Err(e) => fail!("Failed to load wav: {}", e)
};
audio_spec.callback = Some(&audio_cb);
let device = match sdl2::audio::AudioDevice::open(None, 0, &audio_spec) {
Ok((d, _)) => {
d
},
Err(e) => fail!("Failed to open audio device: {}", e)
};
device.resume();
sdl2::timer::delay(3000);
device.close();
let _ = renderer.set_draw_color(sdl2::pixels::RGB(255, 0, 0));
let _ = renderer.clear();
renderer.present();
'main : loop {
'event : loop {
match sdl2::event::poll_event() {
sdl2::event::QuitEvent(_) => break 'main,
sdl2::event::KeyDownEvent(_, _, key, _, _) => {
if key == sdl2::keycode::EscapeKey {
break 'main
}
},
sdl2::event::NoEvent => break 'event,
_ => {}
}
}
}
sdl2::quit();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment