mod clips;
mod decode;
mod engine;
mod impact;
mod occlusion;
mod rolloff;
mod system;
mod voices;
pub(crate) use system::AudioSystem;
pub(crate) use engine::{AudioEngine, EmitterId, EmitterParams};
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub(crate) struct AudioVolumes {
pub(crate) master: Option<f32>,
pub(crate) music: Option<f32>,
pub(crate) sfx: Option<f32>,
pub(crate) voice: Option<f32>,
}
#[cfg(test)]
pub(crate) mod test_wav {
pub(crate) fn pcm_wav_mono(frames: u32) -> Vec<u8> {
let sample_rate: u32 = 44_100;
let bits = 16u16;
let channels = 1u16;
let block_align = channels * bits / 8;
let byte_rate = sample_rate * block_align as u32;
let data_len = frames * block_align as u32;
let mut w = Vec::new();
w.extend_from_slice(b"RIFF");
w.extend_from_slice(&(36 + data_len).to_le_bytes());
w.extend_from_slice(b"WAVE");
w.extend_from_slice(b"fmt ");
w.extend_from_slice(&16u32.to_le_bytes()); w.extend_from_slice(&1u16.to_le_bytes()); w.extend_from_slice(&channels.to_le_bytes());
w.extend_from_slice(&sample_rate.to_le_bytes());
w.extend_from_slice(&byte_rate.to_le_bytes());
w.extend_from_slice(&block_align.to_le_bytes());
w.extend_from_slice(&bits.to_le_bytes());
w.extend_from_slice(b"data");
w.extend_from_slice(&data_len.to_le_bytes());
w.extend(vec![0u8; data_len as usize]);
w
}
}