[Scummvm-cvs-logs] CVS: scummvm/sky/music gmchannel.cpp,1.5,1.5.2.1 gmchannel.h,1.3,1.3.2.1 gmmusic.cpp,1.10,1.10.2.1

Robert G?ffringmann lavosspawn at users.sourceforge.net
Wed Aug 6 00:21:19 CEST 2003


Update of /cvsroot/scummvm/scummvm/sky/music
In directory sc8-pr-cvs1:/tmp/cvs-serv24191/sky/music

Modified Files:
      Tag: branch-0-5-0
	gmchannel.cpp gmchannel.h gmmusic.cpp 
Log Message:
changed code for midi music volume

Index: gmchannel.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmchannel.cpp,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -d -r1.5 -r1.5.2.1
--- gmchannel.cpp	12 Jul 2003 06:20:40 -0000	1.5
+++ gmchannel.cpp	6 Aug 2003 07:00:36 -0000	1.5.2.1
@@ -38,7 +38,8 @@
 	_mt32_to_gm = pInstMap;
 	_veloTab = veloTab;
 
-	_musicVolume = 0x100;
+	_musicVolume = 0x7F;
+	_lastVolume = 0xFF;
 }
 
 bool SkyGmChannel::isActive(void) {
@@ -49,6 +50,12 @@
 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 +173,9 @@
 
 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) {

Index: gmchannel.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmchannel.h,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -d -r1.3 -r1.3.2.1
--- gmchannel.h	12 Jul 2003 06:20:40 -0000	1.3
+++ gmchannel.h	6 Aug 2003 07:00:37 -0000	1.3.2.1
@@ -50,6 +50,7 @@
 	uint8 *_musicData;
 	uint16 _musicVolume;
 	MidiChannelType _channelData;
+	uint8 _lastVolume;
 	//-                          normal subs
 	void setRegister(uint8 regNum, uint8 value);
 	int32 getNextEventTime(void);

Index: gmmusic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmmusic.cpp,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -d -r1.10 -r1.10.2.1
--- gmmusic.cpp	13 Jul 2003 16:22:17 -0000	1.10
+++ gmmusic.cpp	6 Aug 2003 07:00:37 -0000	1.10.2.1
@@ -50,12 +50,9 @@
 
 void SkyGmMusic::setVolume(uint8 volume) {
 
-	uint8 sysEx[6];
 	_musicVolume = volume;
-	if (volume > 0) volume = (volume * 2) / 3 + 43; // GM synths behave kinda logarithmic
-	sysEx[0] = 0x7F; sysEx[1] = 0x7F; sysEx[2] = 0x04; sysEx[3] = 0x01;
-	sysEx[4] = 0; sysEx[5] = volume & 0x7F;
-	_midiDrv->sysEx(sysEx, 6);
+	for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++)
+		_channels[cnt]->updateVolume(_musicVolume);
 }
 
 void SkyGmMusic::timerCall(void) {
@@ -86,6 +83,7 @@
 	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);
 	}
 }
 





More information about the Scummvm-git-logs mailing list