diff options
author | Einar Johan Trøan Sømåen | 2014-01-14 00:24:28 +0100 |
---|---|---|
committer | Einar Johan Trøan Sømåen | 2014-01-14 00:24:28 +0100 |
commit | 0c0ed9fdd814e6dbf8dd0851b42e7ca1c12f6ae5 (patch) | |
tree | 1cf300981c29b1350f78b7411ab6a5083bde84a2 /engines/wintermute/base/sound | |
parent | 0c570712f1a97d2d8def020a7991a04db4574245 (diff) | |
download | scummvm-rg350-0c0ed9fdd814e6dbf8dd0851b42e7ca1c12f6ae5.tar.gz scummvm-rg350-0c0ed9fdd814e6dbf8dd0851b42e7ca1c12f6ae5.tar.bz2 scummvm-rg350-0c0ed9fdd814e6dbf8dd0851b42e7ca1c12f6ae5.zip |
WINTERMUTE: Limit the range of the panning-variable to stay within [-1,1].
Also, store the panning state, so that the next playback starts with the same pan.
Diffstat (limited to 'engines/wintermute/base/sound')
-rw-r--r-- | engines/wintermute/base/sound/base_sound_buffer.cpp | 10 | ||||
-rw-r--r-- | engines/wintermute/base/sound/base_sound_buffer.h | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/engines/wintermute/base/sound/base_sound_buffer.cpp b/engines/wintermute/base/sound/base_sound_buffer.cpp index 7666a441a3..85ba52e334 100644 --- a/engines/wintermute/base/sound/base_sound_buffer.cpp +++ b/engines/wintermute/base/sound/base_sound_buffer.cpp @@ -58,6 +58,7 @@ BaseSoundBuffer::BaseSoundBuffer(BaseGame *inGame) : BaseClass(inGame) { _file = nullptr; _privateVolume = 255; _volume = 255; + _pan = 0; _looping = false; _loopStart = 0; @@ -143,9 +144,9 @@ bool BaseSoundBuffer::play(bool looping, uint32 startSample) { _handle = new Audio::SoundHandle; if (_looping) { Audio::AudioStream *loopStream = new Audio::LoopingAudioStream(_stream, 0, DisposeAfterUse::NO); - g_system->getMixer()->playStream(_type, _handle, loopStream, -1, _volume, 0, DisposeAfterUse::YES); + g_system->getMixer()->playStream(_type, _handle, loopStream, -1, _volume, _pan, DisposeAfterUse::YES); } else { - g_system->getMixer()->playStream(_type, _handle, _stream, -1, _volume, 0, DisposeAfterUse::NO); + g_system->getMixer()->playStream(_type, _handle, _stream, -1, _volume, _pan, DisposeAfterUse::NO); } } @@ -268,8 +269,11 @@ bool BaseSoundBuffer::setLoopStart(uint32 pos) { ////////////////////////////////////////////////////////////////////////// bool BaseSoundBuffer::setPan(float pan) { + pan = MAX(pan, -1.0f); + pan = MIN(pan, 1.0f); + _pan = (int8)(pan * 127); if (_handle) { - g_system->getMixer()->setChannelBalance(*_handle, (int8)(pan * 127)); + g_system->getMixer()->setChannelBalance(*_handle, _pan); } return STATUS_OK; } diff --git a/engines/wintermute/base/sound/base_sound_buffer.h b/engines/wintermute/base/sound/base_sound_buffer.h index 53b86f64c6..c52b34fb23 100644 --- a/engines/wintermute/base/sound/base_sound_buffer.h +++ b/engines/wintermute/base/sound/base_sound_buffer.h @@ -93,6 +93,7 @@ private: bool _streamed; Common::SeekableReadStream *_file; int32 _volume; + int8 _pan; }; } // End of namespace Wintermute |