diff options
author | Robert Göffringmann | 2003-08-20 12:12:11 +0000 |
---|---|---|
committer | Robert Göffringmann | 2003-08-20 12:12:11 +0000 |
commit | af17c1ac5161b261c4c8c41e360dd5d11b7859d7 (patch) | |
tree | 4c5b3a0dcda7056175951a0a747f303b3318e721 /sky/music | |
parent | 123af301474cac28e53f96b5f23f229429d32eaa (diff) | |
download | scummvm-rg350-af17c1ac5161b261c4c8c41e360dd5d11b7859d7.tar.gz scummvm-rg350-af17c1ac5161b261c4c8c41e360dd5d11b7859d7.tar.bz2 scummvm-rg350-af17c1ac5161b261c4c8c41e360dd5d11b7859d7.zip |
copied some fixes which only were in 0.5.1 branch.
svn-id: r9799
Diffstat (limited to 'sky/music')
-rw-r--r-- | sky/music/gmchannel.cpp | 19 | ||||
-rw-r--r-- | sky/music/gmchannel.h | 1 | ||||
-rw-r--r-- | sky/music/gmmusic.cpp | 1 |
3 files changed, 13 insertions, 8 deletions
diff --git a/sky/music/gmchannel.cpp b/sky/music/gmchannel.cpp index 31c5e97847..7442b171c9 100644 --- a/sky/music/gmchannel.cpp +++ b/sky/music/gmchannel.cpp @@ -21,11 +21,6 @@ #include "gmchannel.h" -// the MT32 is a lot more sensitive to velocities than most general midi devices, -// so we need to boost them a little - - - SkyGmChannel::SkyGmChannel(uint8 *pMusicData, uint16 startOfData, MidiDriver *pMidiDrv, byte *pInstMap, uint8 *veloTab) { _musicData = pMusicData; @@ -38,7 +33,8 @@ SkyGmChannel::SkyGmChannel(uint8 *pMusicData, uint16 startOfData, MidiDriver *pM _mt32_to_gm = pInstMap; _veloTab = veloTab; - _musicVolume = 0x100; + _musicVolume = 0x7F; + _lastVolume = 0xFF; } bool SkyGmChannel::isActive(void) { @@ -49,6 +45,12 @@ bool SkyGmChannel::isActive(void) { void SkyGmChannel::updateVolume(uint16 pVolume) { _musicVolume = pVolume; + if (_musicVolume > 0) + _musicVolume = (_musicVolume * 2) / 3 + 43; + if (_lastVolume < 0xFF) { + uint8 newVol = (_lastVolume * _musicVolume) >> 7; + _midiDrv->send((0xB0 | _channelData.midiChannelNumber) | 0x700 | (newVol << 16)); + } } void SkyGmChannel::stopNote(void) { @@ -166,8 +168,9 @@ void SkyGmChannel::com90_getPitch(void) { void SkyGmChannel::com90_getChannelVolume(void) { - _midiDrv->send((0xB0 | _channelData.midiChannelNumber) | 0x700 | (_musicData[_channelData.eventDataPtr] << 16)); - _channelData.eventDataPtr++; + _lastVolume = _musicData[_channelData.eventDataPtr]; + uint8 newVol = (uint8)((_musicData[_channelData.eventDataPtr++] * _musicVolume) >> 7); + _midiDrv->send((0xB0 | _channelData.midiChannelNumber) | 0x700 | (newVol << 16)); } void SkyGmChannel::com90_rewindMusic(void) { diff --git a/sky/music/gmchannel.h b/sky/music/gmchannel.h index 4684678c45..1cf2e02177 100644 --- a/sky/music/gmchannel.h +++ b/sky/music/gmchannel.h @@ -50,6 +50,7 @@ private: uint8 *_musicData; uint16 _musicVolume; MidiChannelType _channelData; + uint8 _lastVolume; //- normal subs void setRegister(uint8 regNum, uint8 value); int32 getNextEventTime(void); diff --git a/sky/music/gmmusic.cpp b/sky/music/gmmusic.cpp index f274be95db..b4fdeeb510 100644 --- a/sky/music/gmmusic.cpp +++ b/sky/music/gmmusic.cpp @@ -86,6 +86,7 @@ void SkyGmMusic::setupChannels(uint8 *channelData) { for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++) { uint16 chDataStart = ((channelData[(cnt << 1) | 1] << 8) | channelData[cnt << 1]) + _musicDataLoc; _channels[cnt] = new SkyGmChannel(_musicData, chDataStart, _midiDrv, _mt32_to_gm, _veloTab); + _channels[cnt]->updateVolume(_musicVolume); } } |