namespace DaggerFramework.Audio { public abstract class AudioBackend : IDisposable { public abstract void Initialize(); public abstract void Update(); public abstract void Shutdown(); // BUS public abstract void CreateBus(string busName); public abstract void SetBusVolume(string busName, float volume); public abstract float GetBusVolume(string busName); // SOUND public abstract void PlaySound(Sound sound, string bus = "Master", float pitch = 1.0f, float volume = 1.0f); public void PlaySound(Sound sound, string bus = "Master") => PlaySound(sound, bus, default, default); public SoundInstance CreateInstance(Sound sound) { var instance = new SoundInstance(this, sound); return instance; } // EFFECTS public abstract void AddBusEffect(T effect, string bus = "Master") where T : AudioEffect; public void Dispose() { Shutdown(); } private LehmerRandom _random = new LehmerRandom(); } }