pub use ears::State;
mod stream;
pub use self::stream::SoundStream;
mod sample;
pub use self::sample::SoundSample;
mod context;
pub use self::context::AudioContext;
pub trait Sound {
fn play(&mut self, context: &AudioContext);
fn pause(&mut self, context: &AudioContext);
fn stop(&mut self, context: &AudioContext);
fn is_playing(&self, context: &AudioContext) -> bool;
fn state(&self, context: &AudioContext) -> State;
fn set_volume(&mut self, volume: f32, context: &AudioContext);
fn set_min_volume(&mut self, volume: f32, context: &AudioContext);
fn set_position(&mut self, x: f32, y: f32, z: f32, context: &AudioContext);
fn position(&self, context: &AudioContext) -> (f32, f32, f32);
fn set_relative(&mut self, relative: bool, context: &AudioContext);
fn is_relative(&mut self, context: &AudioContext) -> bool;
fn set_reference_distance(&mut self, distance: f32, context: &AudioContext);
fn reference_distance(&self, context: &AudioContext) -> f32;
fn set_max_distance(&mut self, distance: f32, context: &AudioContext);
fn max_distance(&self, context: &AudioContext) -> f32;
fn set_direction(&mut self, x: f32, y: f32, z: f32, context: &AudioContext);
fn direction(&self, context: &AudioContext) -> (f32, f32, f32);
fn set_attenuation(&mut self, attenuation: f32, context: &AudioContext);
fn attenuation(&self, context: &AudioContext) -> f32;
fn set_looping(&mut self, looping: bool);
fn is_looping(&self) -> bool;
fn title(&self) -> Option<String>;
fn copyright(&self) -> Option<String>;
fn software(&self) -> Option<String>;
fn artist(&self) -> Option<String>;
fn comment(&self) -> Option<String>;
fn date(&self) -> Option<String>;
fn album(&self) -> Option<String>;
fn license(&self) -> Option<String>;
fn track_number(&self) -> Option<String>;
fn genre(&self) -> Option<String>;
}