diff options
Diffstat (limited to 'engines/glk')
-rw-r--r-- | engines/glk/glk_api.cpp | 9 | ||||
-rw-r--r-- | engines/glk/sound.cpp | 15 | ||||
-rw-r--r-- | engines/glk/sound.h | 7 |
3 files changed, 18 insertions, 13 deletions
diff --git a/engines/glk/glk_api.cpp b/engines/glk/glk_api.cpp index ba05988e86..803e85818e 100644 --- a/engines/glk/glk_api.cpp +++ b/engines/glk/glk_api.cpp @@ -132,6 +132,7 @@ uint GlkAPI::glk_gestalt_ext(uint id, uint val, uint *arr, uint arrlen) { return false; case gestalt_Sound: + case gestalt_Sound2: case gestalt_SoundVolume: case gestalt_SoundMusic: case gestalt_SoundNotify: @@ -151,7 +152,6 @@ uint GlkAPI::glk_gestalt_ext(uint id, uint val, uint *arr, uint arrlen) { case gestalt_GarglkText: return true; - case gestalt_Sound2: default: return false; } @@ -998,7 +998,7 @@ void GlkAPI::glk_window_set_background_color(winid_t win, uint color) { } schanid_t GlkAPI::glk_schannel_create(uint rock) { - return _sounds->create(rock); + return _sounds->create(rock, GLK_MAXVOLUME); } void GlkAPI::glk_schannel_destroy(schanid_t chan) { @@ -1060,9 +1060,8 @@ void GlkAPI::glk_sound_load_hint(uint snd, uint flag) { // No implementation } -schanid_t GlkAPI::glk_schannel_create_ext(uint rock, uint volume) { - // No implementation - return nullptr; +schanid_t GlkAPI::glk_schannel_create_ext(glui32 rock, glui32 volume) { + return _sounds->create(rock, volume); } uint GlkAPI::glk_schannel_play_multi(schanid_t *chanarray, uint chancount, diff --git a/engines/glk/sound.cpp b/engines/glk/sound.cpp index 4f56ee2add..2c8bf319fa 100644 --- a/engines/glk/sound.cpp +++ b/engines/glk/sound.cpp @@ -46,8 +46,8 @@ void Sounds::removeSound(schanid_t snd) { } } -schanid_t Sounds::create(uint rock) { - schanid_t snd = new SoundChannel(this); +schanid_t Sounds::create(uint rock, uint volume) { + schanid_t snd = new SoundChannel(this, volume); _sounds.push_back(snd); return snd; } @@ -73,8 +73,10 @@ void Sounds::poll() { /*--------------------------------------------------------------------------*/ -SoundChannel::SoundChannel(Sounds *owner) : _owner(owner), _soundNum(0), - _rock(0), _notify(0) { +SoundChannel::SoundChannel(Sounds *owner, uint volume) : _owner(owner), + _soundNum(0), _rock(0), _notify(0) { + _defaultVolume = MIN(volume, (uint)GLK_MAXVOLUME); + if (g_vm->gli_register_obj) _dispRock = (*g_vm->gli_register_obj)(this, gidisp_Class_Schannel); } @@ -145,7 +147,8 @@ uint SoundChannel::play(uint soundNum, uint repeats, uint notify) { } // Start playing the audio - g_vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, stream); + g_vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, stream, -1, + _defaultVolume * 255 / GLK_MAXVOLUME); return 0; } @@ -162,7 +165,7 @@ void SoundChannel::poll() { } void SoundChannel::setVolume(uint volume, uint duration, uint notify) { - uint newVol = volume * 255 / 0x10000; + uint newVol = volume * 255 / GLK_MAXVOLUME; g_vm->_mixer->setChannelVolume(_handle, newVol); if (notify) { diff --git a/engines/glk/sound.h b/engines/glk/sound.h index 251c75a2fe..0c2f0b0236 100644 --- a/engines/glk/sound.h +++ b/engines/glk/sound.h @@ -30,6 +30,8 @@ namespace Glk { +#define GLK_MAXVOLUME 0x10000 + class Sounds; /** @@ -41,6 +43,7 @@ private: uint _soundNum; uint _notify; Audio::SoundHandle _handle; + uint _defaultVolume; public: uint _rock; gidispatch_rock_t _dispRock; @@ -48,7 +51,7 @@ public: /** * Constructor */ - SoundChannel(Sounds *owner); + SoundChannel(Sounds *owner, uint volume); /** * Destructor @@ -109,7 +112,7 @@ public: /** * Create a new channel */ - schanid_t create(uint rock = 0); + schanid_t create(uint rock = 0, uint volume = GLK_MAXVOLUME); /** * Used to iterate over the current list of sound channels |