rodio 0.12.0

Audio playback library
Documentation
use std::io::BufReader;
use std::thread;
use std::time::Duration;

fn main() {
    let (_stream, handle) = rodio::OutputStream::try_default().unwrap();
    let sink = rodio::SpatialSink::try_new(
        &handle,
        [-10.0, 0.0, 0.0],
        [1.0, 0.0, 0.0],
        [-1.0, 0.0, 0.0],
    )
    .unwrap();

    let file = std::fs::File::open("examples/music.ogg").unwrap();
    let source = rodio::Decoder::new(BufReader::new(file)).unwrap();
    sink.append(source);

    // A sound emitter playing the music starting at the left gradually moves to the right
    // eventually passing through the listener, then it continues on to the right for a distance
    // until it stops and begins traveling to the left, it will eventually pass through the
    // listener again.
    // This is repeated 5 times.
    for _ in 0..5 {
        for i in 1..1001 {
            thread::sleep(Duration::from_millis(5));
            sink.set_emitter_position([(i - 500) as f32 / 50.0, 0.0, 0.0]);
        }
        for i in 1..1001 {
            thread::sleep(Duration::from_millis(5));
            sink.set_emitter_position([-(i - 500) as f32 / 50.0, 0.0, 0.0]);
        }
    }
    sink.sleep_until_end();
}