[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