diff --git a/sound/filters/pure_filter.hpp b/sound/filters/pure_filter.hpp index ffa49d35a..9d19ffd18 100644 --- a/sound/filters/pure_filter.hpp +++ b/sound/filters/pure_filter.hpp @@ -23,6 +23,7 @@ namespace Mangle void setPan(float f) { client->setPan(f); } void setPos(float x, float y, float z) { client->setPos(x,y,z); } + void setPitch(float p) { client->setPitch(p); } void setRepeat(bool b) { client->setRepeat(b); } void setStreaming(bool b) { client->setStreaming(b); } diff --git a/sound/output.hpp b/sound/output.hpp index 404dcf4f8..35182e58c 100644 --- a/sound/output.hpp +++ b/sound/output.hpp @@ -48,6 +48,9 @@ class Sound /// Set left/right pan. -1.0 is left, 0.0 is center and 1.0 is right. virtual void setPan(float) = 0; + /// Set pitch (1.0 is normal speed) + virtual void setPitch(float) = 0; + /// Set the position. May not work with all backends. virtual void setPos(float x, float y, float z) = 0; diff --git a/sound/outputs/openal_out.cpp b/sound/outputs/openal_out.cpp index acefb260c..363097c3e 100644 --- a/sound/outputs/openal_out.cpp +++ b/sound/outputs/openal_out.cpp @@ -146,6 +146,12 @@ void OpenAL_Sound::setPos(float x, float y, float z) checkALError("setting position"); } +void OpenAL_Sound::setPitch(float pitch) +{ + alSourcef(inst, AL_PITCH, pitch); + checkALError("setting pitch"); +} + void OpenAL_Sound::setRepeat(bool rep) { alSourcei(inst, AL_LOOPING, rep?AL_TRUE:AL_FALSE); diff --git a/sound/outputs/openal_out.hpp b/sound/outputs/openal_out.hpp index 18f32f2a9..084128e89 100644 --- a/sound/outputs/openal_out.hpp +++ b/sound/outputs/openal_out.hpp @@ -36,6 +36,7 @@ class OpenAL_Sound : public Sound bool isPlaying() const; void setVolume(float); void setPos(float x, float y, float z); + void setPitch(float); void setRepeat(bool); void setStreaming(bool) {} // Not implemented yet SoundPtr clone() const;