use crate::context::Context;
use crate::hrtf::Hrtf;
use crate::ray_tracing::RayTracer;
use crate::simulation::{SimulationSettings, Source};
#[derive(Debug, Copy, Clone)]
pub struct WwiseSettings {
pub meters_per_unit: f32,
}
pub fn initialize(context: &Context, settings: Option<WwiseSettings>) {
let mut ffi_settings = settings.map(|s| audionimbus_sys::IPLWwiseSettings {
metersPerUnit: s.meters_per_unit,
});
let ipl_settings = ffi_settings
.as_mut()
.map_or(std::ptr::null_mut(), std::ptr::from_mut);
unsafe { audionimbus_sys::wwise::iplWwiseInitialize(context.raw_ptr(), ipl_settings) }
}
pub fn terminate() {
unsafe { audionimbus_sys::wwise::iplWwiseTerminate() }
}
pub fn set_simulation_settings<T: RayTracer>(simulation_settings: &SimulationSettings<'static, T>) {
unsafe { audionimbus_sys::wwise::iplWwiseSetSimulationSettings(simulation_settings.to_ffi()) }
}
pub fn set_hrtf(hrtf: &Hrtf) {
unsafe { audionimbus_sys::wwise::iplWwiseSetHRTF(hrtf.raw_ptr()) }
}
pub type WwiseGameObjectId = u64;
pub fn add_source(game_object_id: WwiseGameObjectId, source: &Source) {
unsafe { audionimbus_sys::wwise::iplWwiseAddSource(game_object_id, source.raw_ptr()) }
}
pub fn remove_source(game_object_id: WwiseGameObjectId) {
unsafe { audionimbus_sys::wwise::iplWwiseRemoveSource(game_object_id) }
}
pub fn set_reverb_source(source: &Source) {
unsafe { audionimbus_sys::wwise::iplWwiseSetReverbSource(source.raw_ptr()) }
}
pub fn version() -> WwiseIntegrationVersion {
use std::os::raw::c_uint;
let mut major: c_uint = 0;
let mut minor: c_uint = 0;
let mut patch: c_uint = 0;
unsafe {
audionimbus_sys::wwise::iplWwiseGetVersion(&raw mut major, &raw mut minor, &raw mut patch);
}
WwiseIntegrationVersion {
major: major as usize,
minor: minor as usize,
patch: patch as usize,
}
}
#[derive(Copy, Clone, Debug)]
pub struct WwiseIntegrationVersion {
pub major: usize,
pub minor: usize,
pub patch: usize,
}