package engine import "core:container/queue" import "core:log" import "core:math/linalg" AUDIO_ENGINE_MINIAUDIO :: #config(AUDIO_ENGINE_MINIAUDIO, false) AUDIO_ENGINE_FMOD :: #config(AUDIO_ENGINE_FMOD, false) AUDIO_ENGINE_WWISE :: #config(AUDIO_ENGINE_WWISE, false) import "miniaudio" when AUDIO_ENGINE_MINIAUDIO { Engine_Backend :: miniaudio.Engine Sound_Backend :: miniaudio.Sound Sound_Instance_Backend :: miniaudio.Sound_Instance Bus_Backend :: miniaudio.Bus } else when AUDIO_ENGINE_FMOD { } Engine :: struct { backend: Engine_Backend, sound_instance_ids: queue.Queue(Sound_Instance_ID), sound_instances: []Sound_Instance, listeners: [MAX_LISTENERS]Listener, available_listener_ids: queue.Queue(Listener_ID), } init :: proc(engine: ^Engine, max_sound_instances: u32) -> bool { assert(engine != nil) assert(max_sound_instances > 0) when AUDIO_ENGINE_MINIAUDIO { // engine.ยง new(miniaudio.Engine) // if engine.data != nil { // v := transmute(^miniaudio.Engine)(engine.data) // if !miniaudio.init(v) { // free(engine.data) // engine.data = nil // log.errorf("Failed to initialize audio-engine MINIAUDIO.") // return false // } // } if !miniaudio.init(&engine.backend) { // free(engine.data) // engine.data = nil log.errorf("Failed to initialize audio-engine MINIAUDIO.") return false } } else { #assert("No audio-engine defined. '-define:AUDIO_ENGINE_X=true' where X is the audio-engine; 'MINIAUDIO', 'FMOD', 'WWISE'.") } { // Initialize sound-instances. log.infof("Creating %v sound-instances.", max_sound_instances) engine.sound_instances = make([]Sound_Instance, max_sound_instances) queue_init_err := queue.init(&engine.sound_instance_ids, int(max_sound_instances)) assert(queue_init_err == .None) for i in 0..