ambisonic 0.1.1

Compose and play 3D audio.
Documentation

ambisonic

Compose and play 3D audio.

The library provides 3D sound scene support on top of rodio. It allows positioning and moving sound sources freely in 3D space around a virtual listener, and playing the resulting spatial mix in real-time over a sound card.

ambisonic is built around the concept of an intermediate representation of the sound field, called B-format. The B-format describes what the listener should hear, independent of their audio playback equipment. This leads to a clear separation of audio scene composition and rendering. For details, see Wikipedia.

In its current state, the library allows spatial composition of single-channel rodio sources into a first-order B-format stream. That stream is rendered to a two-channel stereo signal, and played through a rodio sink. Although at the moment only stereo output is supported, the B-format abstraction should make it easy to implement arbitrary speaker configurations in the future.

Usage Example

use std::thread::sleep;
use std::time::Duration;
use ambisonic::{rodio, AmbisonicBuilder};

let scene = AmbisonicBuilder::default().build();

let source = rodio::source::SineWave::new(440);
let mut sound = scene.play(source);

// exaggerate doppler effect
sound.set_doppler_factor(10.0);

// move sound from right to left
sound.set_velocity([-1.0, 0.0, 0.0]);
for i in 0..1000 {
    sound.set_position([50.0 - i as f32 / 10.0, 1.0, 0.0]);
    sleep(Duration::from_millis(10));
}
sound.set_velocity([0.0, 0.0, 0.0]);