[Scummvm-cvs-logs] SF.net SVN: scummvm:[47023] scummvm/trunk/engines/sci/sound

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Jan 5 11:28:09 CET 2010


Revision: 47023
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47023&view=rev
Author:   thebluegr
Date:     2010-01-05 10:28:09 +0000 (Tue, 05 Jan 2010)

Log Message:
-----------
Cleanup, fixed fading of digital sound effects

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sound/midiparser_sci.cpp
    scummvm/trunk/engines/sci/sound/midiparser_sci.h
    scummvm/trunk/engines/sci/sound/music.h
    scummvm/trunk/engines/sci/sound/soundcmd.cpp

Modified: scummvm/trunk/engines/sci/sound/midiparser_sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/midiparser_sci.cpp	2010-01-05 10:03:55 UTC (rev 47022)
+++ scummvm/trunk/engines/sci/sound/midiparser_sci.cpp	2010-01-05 10:28:09 UTC (rev 47023)
@@ -199,7 +199,7 @@
 			}
 		}
 		if (info.basic.param1 == 7) // channel volume change -scale it
-			info.basic.param2 = info.basic.param2 * _volume / 0x7F;
+			info.basic.param2 = info.basic.param2 * _volume / MUSIC_VOLUME_MAX;
 		info.length = 0;
 		break;
 
@@ -474,18 +474,16 @@
 	return _mixedData;
 }
 
-void MidiParser_SCI::setVolume(byte bVolume) {
-	if (bVolume > 0x7F)
-		bVolume = 0x7F;
-	if (_volume != bVolume) {
-		_volume = bVolume;
+void MidiParser_SCI::setVolume(byte volume) {
+	assert(volume <= MUSIC_VOLUME_MAX);
+	if (_volume != volume) {
+		_volume = volume;
 
 		switch (_soundVersion) {
 		case SCI_VERSION_0_EARLY:
 		case SCI_VERSION_0_LATE: {
-			MidiPlayer *SCIDriver = (MidiPlayer *)_driver;
 			int16 globalVolume = _volume * 15 / 127;
-			SCIDriver->setVolume(globalVolume);
+			((MidiPlayer *)_driver)->setVolume(globalVolume);
 			break;
 		}
 

Modified: scummvm/trunk/engines/sci/sound/midiparser_sci.h
===================================================================
--- scummvm/trunk/engines/sci/sound/midiparser_sci.h	2010-01-05 10:03:55 UTC (rev 47022)
+++ scummvm/trunk/engines/sci/sound/midiparser_sci.h	2010-01-05 10:28:09 UTC (rev 47023)
@@ -54,7 +54,7 @@
 		return false;
 	}
 	void unloadMusic();
-	void setVolume(byte bVolume);
+	void setVolume(byte volume);
 	void stop() {
 		_abort_parse = true;
 		allNotesOff();

Modified: scummvm/trunk/engines/sci/sound/music.h
===================================================================
--- scummvm/trunk/engines/sci/sound/music.h	2010-01-05 10:03:55 UTC (rev 47022)
+++ scummvm/trunk/engines/sci/sound/music.h	2010-01-05 10:28:09 UTC (rev 47023)
@@ -154,6 +154,16 @@
 	uint16 soundGetVoices();
 	uint32 soundGetTempo() const { return _dwTempo; }
 
+	bool soundIsActive(MusicEntry *pSnd) {
+		assert(pSnd->pStreamAud != 0);
+		return _pMixer->isSoundHandleActive(pSnd->hCurrentAud);
+	}
+
+	void updateAudioStreamTicker(MusicEntry *pSnd) {
+		assert(pSnd->pStreamAud != 0);
+		pSnd->ticker = (uint16)(_pMixer->getSoundElapsedTime(pSnd->hCurrentAud) * 0.06);
+	}
+
 	MusicEntry *getSlot(reg_t obj);
 
 	void pushBackSlot(MusicEntry *slotEntry) {

Modified: scummvm/trunk/engines/sci/sound/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/soundcmd.cpp	2010-01-05 10:03:55 UTC (rev 47022)
+++ scummvm/trunk/engines/sci/sound/soundcmd.cpp	2010-01-05 10:28:09 UTC (rev 47023)
@@ -804,22 +804,20 @@
 
 	if (musicSlot->pStreamAud) {
 		// Update digital sound effect slots here
-		Audio::Mixer *mixer = g_system->getMixer();
-
 		uint currentLoopCounter = musicSlot->pStreamAud->getNumPlayedLoops();
 		if (currentLoopCounter != musicSlot->sampleLoopCounter) {
 			// during last time we looped at least one time, update loop accordingly
 			musicSlot->loop -= currentLoopCounter - musicSlot->sampleLoopCounter;
 			musicSlot->sampleLoopCounter = currentLoopCounter;
 		}
-		if (!mixer->isSoundHandleActive(musicSlot->hCurrentAud)) {
+		if (!_music->soundIsActive(musicSlot)) {
 			cmdStopSound(obj, 0);
 		} else {
-			musicSlot->ticker = (uint16)(mixer->getSoundElapsedTime(musicSlot->hCurrentAud) * 0.06);
+			_music->updateAudioStreamTicker(musicSlot);
 		}
 		// We get a flag from MusicEntry::doFade() here to set volume for the stream
 		if (musicSlot->fadeSetVolume) {
-			mixer->setChannelVolume(musicSlot->hCurrentAud, musicSlot->volume);
+			_music->soundSetVolume(musicSlot, musicSlot->volume);
 			musicSlot->fadeSetVolume = false;
 		}
 	} else {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list