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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Thu Jan 7 18:45:17 CET 2010


Revision: 47136
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47136&view=rev
Author:   lordhoto
Date:     2010-01-07 17:45:17 +0000 (Thu, 07 Jan 2010)

Log Message:
-----------
Premiliary adaption of SCI to use LoopingAudioStream. (This could really need some cleanup...)

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

Modified: scummvm/trunk/engines/sci/sound/audio.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/audio.cpp	2010-01-07 17:28:15 UTC (rev 47135)
+++ scummvm/trunk/engines/sci/sound/audio.cpp	2010-01-07 17:45:17 UTC (rev 47136)
@@ -192,8 +192,8 @@
 	return buffer;
 }
 
-Audio::AudioStream *AudioPlayer::getAudioStream(uint32 number, uint32 volume, int *sampleLen) {
-	Audio::AudioStream *audioStream = 0;
+Audio::RewindableAudioStream *AudioPlayer::getAudioStream(uint32 number, uint32 volume, int *sampleLen) {
+	Audio::RewindableAudioStream *audioStream = 0;
 	uint32 size = 0;
 	byte *data = 0;
 	byte flags = 0;

Modified: scummvm/trunk/engines/sci/sound/audio.h
===================================================================
--- scummvm/trunk/engines/sci/sound/audio.h	2010-01-07 17:28:15 UTC (rev 47135)
+++ scummvm/trunk/engines/sci/sound/audio.h	2010-01-07 17:45:17 UTC (rev 47136)
@@ -65,7 +65,7 @@
 		
 	void setAudioRate(uint16 rate) { _audioRate = rate; }
 	Audio::SoundHandle *getAudioHandle() { return &_audioHandle; }
-	Audio::AudioStream *getAudioStream(uint32 number, uint32 volume, int *sampleLen);
+	Audio::RewindableAudioStream *getAudioStream(uint32 number, uint32 volume, int *sampleLen);
 	int getAudioPosition();
 	int startAudio(uint16 module, uint32 tuple);
 	void stopAudio();

Modified: scummvm/trunk/engines/sci/sound/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/music.cpp	2010-01-07 17:28:15 UTC (rev 47135)
+++ scummvm/trunk/engines/sci/sound/music.cpp	2010-01-07 17:45:17 UTC (rev 47136)
@@ -323,6 +323,8 @@
 			delete pSnd->pStreamAud;
 			pSnd->pStreamAud = Audio::makeLinearInputStream(channelData, track->digitalSampleSize, track->digitalSampleRate,
 					Audio::Mixer::FLAG_UNSIGNED, 0, 0);
+			delete pSnd->pLoopStream;
+			pSnd->pLoopStream = 0;
 			pSnd->soundType = Audio::Mixer::kSFXSoundType;
 			pSnd->hCurrentAud = Audio::SoundHandle();
 		} else {
@@ -370,13 +372,18 @@
 	_mutex.unlock();	// unlock to perform mixer-related calls
 
 	if (pSnd->pStreamAud && !_pMixer->isSoundHandleActive(pSnd->hCurrentAud)) {
-		// Are we supposed to loop the stream?
-		if (pSnd->loop > 1)
-			pSnd->pStreamAud->setNumLoops(pSnd->loop);
-		else
-			pSnd->pStreamAud->setNumLoops(1);
-		_pMixer->playInputStream(pSnd->soundType, &pSnd->hCurrentAud,
-				pSnd->pStreamAud, -1, pSnd->volume, 0, false);
+		if (pSnd->loop > 1) {
+			pSnd->pLoopStream = new Audio::LoopingAudioStream(pSnd->pStreamAud,
+			                                                  pSnd->loop, false
+			                                                  );
+			_pMixer->playInputStream(pSnd->soundType, &pSnd->hCurrentAud,
+			                         pSnd->pLoopStream, -1, pSnd->volume, 0,
+			                         false);
+		} else {
+			_pMixer->playInputStream(pSnd->soundType, &pSnd->hCurrentAud,
+			                         pSnd->pStreamAud, -1, pSnd->volume, 0,
+			                         false);
+		}
 	} else {
 		_mutex.lock();
 		if (pSnd->pMidiParser) {
@@ -434,6 +441,8 @@
 		_pMixer->stopHandle(pSnd->hCurrentAud);
 		delete pSnd->pStreamAud;
 		pSnd->pStreamAud = NULL;
+		delete pSnd->pLoopStream;
+		pSnd->pLoopStream = 0;
 	}
 
 	_mutex.lock();
@@ -529,6 +538,7 @@
 	soundType = Audio::Mixer::kMusicSoundType;
 
 	pStreamAud = 0;
+	pLoopStream = 0;
 	pMidiParser = 0;
 }
 

Modified: scummvm/trunk/engines/sci/sound/music.h
===================================================================
--- scummvm/trunk/engines/sci/sound/music.h	2010-01-07 17:28:15 UTC (rev 47135)
+++ scummvm/trunk/engines/sci/sound/music.h	2010-01-07 17:45:17 UTC (rev 47136)
@@ -104,7 +104,11 @@
 //protected:
 #endif
 	MidiParser_SCI *pMidiParser;
-	Audio::AudioStream *pStreamAud;
+
+	// TODO: We need to revise how we store the different
+	// audio stream objects we require.
+	Audio::RewindableAudioStream *pStreamAud;
+	Audio::LoopingAudioStream *pLoopStream;
 	Audio::SoundHandle hCurrentAud;
 
 public:

Modified: scummvm/trunk/engines/sci/sound/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sound/soundcmd.cpp	2010-01-07 17:28:15 UTC (rev 47135)
+++ scummvm/trunk/engines/sci/sound/soundcmd.cpp	2010-01-07 17:45:17 UTC (rev 47136)
@@ -804,7 +804,11 @@
 
 	if (musicSlot->pStreamAud) {
 		// Update digital sound effect slots here
-		uint currentLoopCounter = musicSlot->pStreamAud->getNumPlayedLoops();
+		uint currentLoopCounter = 0;
+
+		if (musicSlot->pLoopStream)
+			currentLoopCounter = musicSlot->pLoopStream->getCompleteIterations();
+
 		if (currentLoopCounter != musicSlot->sampleLoopCounter) {
 			// during last time we looped at least one time, update loop accordingly
 			musicSlot->loop -= currentLoopCounter - musicSlot->sampleLoopCounter;


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