#![crate_type = "bin"]
extern crate sdl2;
extern crate sdl2_mixer;
use std::env;
use std::path::Path;
use sdl2::*;
use sdl2_mixer::{INIT_MP3, INIT_FLAC, INIT_MOD, INIT_FLUIDSYNTH, INIT_MODPLUG,
INIT_OGG, DEFAULT_FREQUENCY};
fn main() {
let args: Vec<_> = env::args().collect();
if args.len() < 2 {
println!("Usage: ./demo audio.[mp3|wav|ogg]")
} else {
demo(Path::new(&args[1]));
}
}
fn demo(filename: &Path) {
println!("linked version: {}", sdl2_mixer::get_linked_version());
let _ = sdl2::init().audio().timer();
println!("mixer initialized: {}", sdl2_mixer::init(
INIT_MP3 | INIT_FLAC | INIT_MOD | INIT_FLUIDSYNTH |
INIT_MODPLUG | INIT_OGG).bits());
let _ = sdl2_mixer::open_audio(DEFAULT_FREQUENCY, 0x8010u16, 2, 1024);
sdl2_mixer::allocate_channels(0);
{
let n = sdl2_mixer::get_chunk_decoders_number();
println!("available chunk(sample) decoders: {}", n);
for i in (0..n) {
println!(" decoder {} => {}", i, sdl2_mixer::get_chunk_decoder(i));
}
}
{
let n = sdl2_mixer::get_music_decoders_number();
println!("available music decoders: {}", n);
for i in (0..n) {
println!(" decoder {} => {}", i, sdl2_mixer::get_music_decoder(i));
}
}
println!("query spec => {:?}", sdl2_mixer::query_spec());
{
let music = sdl2_mixer::Music::from_file(filename).unwrap();
fn hook_finished() {
println!("play ends! from rust cb");
}
sdl2_mixer::Music::hook_finished(hook_finished);
println!("music => {:?}", music);
println!("music type => {:?}", music.get_type());
println!("music volume => {:?}", sdl2_mixer::Music::get_volume());
println!("play => {:?}", music.play(1));
sdl2::timer::delay(10000);
println!("fading out ... {:?}", sdl2_mixer::Music::fade_out(4000));
sdl2::timer::delay(5000);
println!("fading in from pos ... {:?}", music.fade_in_from_pos(1, 10000, 100.0));
sdl2::timer::delay(5000);
sdl2_mixer::Music::halt();
sdl2::timer::delay(1000);
}
println!("qutting mixer");
sdl2_mixer::quit();
println!("quitting sdl");
}