diff --git a/DaggerFramework/Source/Audio/AudioBackend.cs b/DaggerFramework/Source/Audio/AudioBackend.cs index 18a75e0..c93cb32 100644 --- a/DaggerFramework/Source/Audio/AudioBackend.cs +++ b/DaggerFramework/Source/Audio/AudioBackend.cs @@ -13,13 +13,11 @@ namespace DaggerFramework.Audio // 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 void PlaySoundVariation(Sound sound, string bus = "Master", float pitchVariation = 0.1f, float volume = 1.0f) - { - var maxPitch = 1.0f + pitchVariation; - var minPitch = 1.0f - pitchVariation; - var pitch = (float)_random.NextDouble() * (maxPitch - minPitch) + minPitch; - PlaySound(sound, bus, pitch, volume); + public SoundInstance CreateInstance(Sound sound) + { + var instance = new SoundInstance(this, sound); + return instance; } // EFFECTS @@ -32,9 +30,4 @@ namespace DaggerFramework.Audio private LehmerRandom _random = new LehmerRandom(); } - - public struct SoundInstance - { - - } } \ No newline at end of file diff --git a/DaggerFramework/Source/Audio/SoundInstance.cs b/DaggerFramework/Source/Audio/SoundInstance.cs new file mode 100644 index 0000000..018c19e --- /dev/null +++ b/DaggerFramework/Source/Audio/SoundInstance.cs @@ -0,0 +1,46 @@ +namespace DaggerFramework.Audio +{ + public class SoundInstance + { + public SoundInstance(AudioBackend backend, Sound sound) + { + _backend = backend; + _sound = sound; + } + + public SoundInstance PitchVariation(float min, float max) + { + var random = new LehmerRandom(); + _pitch = (float)random.NextDouble() * (max - min) + min; + return this; + } + + public SoundInstance VolumeVariation(float min, float max) + { + var random = new LehmerRandom(); + _volume = (float)random.NextDouble() * (max - min) + min; + return this; + } + + public SoundInstance OnBus(string bus = "Master") + { + _bus = bus; + return this; + } + + public void Play() + { + _backend.PlaySound(GetSound(), _bus, _pitch, _volume); + } + + protected virtual Sound GetSound() + { + return _sound; + } + + private readonly AudioBackend _backend; + private readonly Sound _sound; + private string _bus = "Master"; + private float _pitch, _volume = 1.0f; + } +} \ No newline at end of file diff --git a/TestGame/Resources/sounds/shuffled_test/move_1.ogg b/TestGame/Resources/sounds/shuffled_test/move_1.ogg new file mode 100644 index 0000000..006be1f Binary files /dev/null and b/TestGame/Resources/sounds/shuffled_test/move_1.ogg differ diff --git a/TestGame/Resources/sounds/shuffled_test/move_2.ogg b/TestGame/Resources/sounds/shuffled_test/move_2.ogg new file mode 100644 index 0000000..d406474 Binary files /dev/null and b/TestGame/Resources/sounds/shuffled_test/move_2.ogg differ diff --git a/TestGame/Resources/sounds/shuffled_test/move_3.ogg b/TestGame/Resources/sounds/shuffled_test/move_3.ogg new file mode 100644 index 0000000..24195b8 Binary files /dev/null and b/TestGame/Resources/sounds/shuffled_test/move_3.ogg differ diff --git a/TestGame/Resources/sounds/shuffled_test/move_4.ogg b/TestGame/Resources/sounds/shuffled_test/move_4.ogg new file mode 100644 index 0000000..85a4d68 Binary files /dev/null and b/TestGame/Resources/sounds/shuffled_test/move_4.ogg differ diff --git a/TestGame/Resources/sounds/shuffled_test/move_5.ogg b/TestGame/Resources/sounds/shuffled_test/move_5.ogg new file mode 100644 index 0000000..d7fb6a8 Binary files /dev/null and b/TestGame/Resources/sounds/shuffled_test/move_5.ogg differ diff --git a/TestGame/TestGame.cs b/TestGame/TestGame.cs index 6d208b7..5e3830a 100644 --- a/TestGame/TestGame.cs +++ b/TestGame/TestGame.cs @@ -49,7 +49,10 @@ public class TestGame : Game if (_inputHandler.IsActionJustPressed("play")) { - _audioBackend.PlaySoundVariation(_testSound, "Master", 0.1f); + var instance = _audioBackend.CreateInstance(_testSound) + .PitchVariation(min: 0.9f, max: 1.2f) + .VolumeVariation(min: 0.90f, max: 1.0f); + instance.Play(); } _audioBackend.Update();