1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//! Sound library for games and interactive applications.

//!

//! ## Features

//!

//! - Generic and spatial sounds.

//! - WAV and OGG/Vorbis formats support.

//! - Streaming.

//! - Head-related transfer function support ([HRTF](https://en.wikipedia.org/wiki/Head-related_transfer_function)).

//! - Reverb effect.

//!

//! ## Examples

//!

//! Here is an example of how to play a sound using rg3d-sound:

//!

//! ```no_run

//! use std::{

//!     thread,

//!     time::Duration

//! };

//! use rg3d_sound::{

//!     source::{

//!         generic::GenericSourceBuilder,

//!         SoundSource,

//!         Status

//!     },

//!     context::Context,

//!     buffer::{

//!         DataSource,

//!         SoundBuffer

//!     },

//! };

//!

//!  let context = Context::new().unwrap();

//!

//!  let sound_buffer = SoundBuffer::new_generic(DataSource::from_file("sound.wav").unwrap()).unwrap();

//!

//!  let source = GenericSourceBuilder::new(sound_buffer)

//!     .with_status(Status::Playing)

//!     .build_source()

//!     .unwrap();

//!

//!  context.lock()

//!     .unwrap()

//!     .add_source(source);

//!

//!  thread::sleep(Duration::from_secs(3));

//!

//! ```

//!

//! Other examples can be found in `./examples` folder. Make sure you run them with `--release` flag.

//!

//! ## Supported OS

//!

//! Currently only Windows and Linux are supported.

//!

//! ## HRTF

//!

//! Library uses special HRIR Spheres which were composed from IRCAM HRIR database. Since

//! HRTF is very specific to each person, you should try some of them to find best for you.

//! They can be found [here](https://github.com/mrDIMAS/hrir_sphere_builder/tree/master/hrtf_base/IRCAM).


#![warn(missing_docs)]

// Platform-dependent crates

#[macro_use]
#[cfg(target_os = "windows")]
extern crate winapi;

#[cfg(target_os = "linux")]
extern crate alsa_sys;

// Generic crates.

extern crate byteorder;
extern crate lewton;
extern crate rg3d_core;

pub mod buffer;
pub mod context;
pub mod dsp;
pub mod effects;
pub mod error;
pub mod listener;
pub mod renderer;
pub mod source;

// Reexport some modules because there some types of them in public API.

pub use hrtf;
pub use rg3d_core::math;
pub use rg3d_core::pool;

mod decoder;
mod device;