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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Fri Jan 1 14:21:31 CET 2010


Revision: 46820
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46820&view=rev
Author:   m_kiewitz
Date:     2010-01-01 13:21:30 +0000 (Fri, 01 Jan 2010)

Log Message:
-----------
SCI/newmusic: added fade and loop capability to samples (looping doesnt work yet), fixes lsl1 doll inflation endless loop

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

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2010-01-01 13:11:34 UTC (rev 46819)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2010-01-01 13:21:30 UTC (rev 46820)
@@ -377,6 +377,13 @@
 	_mutex.unlock();
 
 	if (pSnd->pStreamAud && !_pMixer->isSoundHandleActive(pSnd->hCurrentAud)) {
+		SegManager *segMan = ((SciEngine *)g_engine)->getEngineState()->_segMan;	// HACK
+		uint16 loop = GET_SEL32V(segMan, pSnd->soundObj, loop);
+		// Are we supposed to loop the stream?
+		if (loop > 1)
+			pSnd->pStreamAud->setNumLoops(loop);
+		else
+			pSnd->pStreamAud->setNumLoops(1);
 		_pMixer->playInputStream(Audio::Mixer::kSFXSoundType, &pSnd->hCurrentAud,
 				pSnd->pStreamAud, -1, pSnd->volume, 0, false);
 	} else if (pSnd->pMidiParser) {
@@ -529,12 +536,15 @@
 void MusicEntry::onTimer(SciVersion soundVersion, Audio::Mixer *mixer) {
 	if (status != kSoundPlaying)
 		return;
+
+	if (fadeStep)
+		doFade(mixer);
+
 	if (pMidiParser) {
-		if (fadeStep)
-			doFade();
 		pMidiParser->onTimer();
 		ticker = (uint16)pMidiParser->getTick();
 	} else if (pStreamAud) {
+		// TODO: We need to update loop selector here, when sample is looping
 		if (!mixer->isSoundHandleActive(hCurrentAud)) {
 			ticker = SIGNAL_OFFSET;
 			signal = SIGNAL_OFFSET;
@@ -545,7 +555,7 @@
 	}
 }
 
-void MusicEntry::doFade() {
+void MusicEntry::doFade(Audio::Mixer *mixer) {
 	if (fadeTicker)
 		fadeTicker--;
 	else {
@@ -557,7 +567,10 @@
 			signal = SIGNAL_OFFSET;
 		}
 
-		pMidiParser->setVolume(volume);
+		if (pMidiParser)
+			pMidiParser->setVolume(volume);
+		if (pStreamAud)
+			mixer->setChannelVolume(hCurrentAud, volume);
 	}
 }
 

Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h	2010-01-01 13:11:34 UTC (rev 46819)
+++ scummvm/trunk/engines/sci/sfx/music.h	2010-01-01 13:21:30 UTC (rev 46820)
@@ -103,7 +103,7 @@
 	MusicEntry();
 	~MusicEntry();
 
-	void doFade();
+	void doFade(Audio::Mixer *mixer);
 	void onTimer(SciVersion soundVersion, Audio::Mixer *mixer);
 
 #ifndef USE_OLD_MUSIC_FUNCTIONS

Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-01 13:11:34 UTC (rev 46819)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-01 13:21:30 UTC (rev 46820)
@@ -400,6 +400,8 @@
 		// Find slot again :)
 		musicSlot = _music->getSlot(obj);
 	}
+	int16 loop = GET_SEL32V(_segMan, obj, loop);
+	debugC(2, kDebugLevelSound, "cmdPlayHandle: resource number %d, loop %d", number, loop);
 
 	PUT_SEL32(_segMan, obj, handle, obj);
 


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