From 054acfbbd38771fb78f58754d6c7ee593a910cbf Mon Sep 17 00:00:00 2001 From: Paweł Kołodziejski Date: Sun, 2 May 2004 12:20:55 +0000 Subject: added rest of save/load code svn-id: r13737 --- scumm/imuse_digi/dimuse.cpp | 22 +++++++++++++++++++++- scumm/imuse_digi/dimuse.h | 3 +++ scumm/imuse_digi/dimuse_track.cpp | 7 ++++++- 3 files changed, 30 insertions(+), 2 deletions(-) (limited to 'scumm') diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp index 74a60fda5f..1c8e611250 100644 --- a/scumm/imuse_digi/dimuse.cpp +++ b/scumm/imuse_digi/dimuse.cpp @@ -102,8 +102,10 @@ void IMuseDigital::saveOrLoad(Serializer *ser) { MKLINE(Track, volFadeDelay, sleInt32, VER(31)), MKLINE(Track, volFadeUsed, sleByte, VER(31)), MKLINE(Track, soundId, sleInt32, VER(31)), + MKARRAY(Track, soundName, sleByte, 15, VER(31)), MKLINE(Track, used, sleByte, VER(31)), MKLINE(Track, toBeRemoved, sleByte, VER(31)), + MKLINE(Track, souStream, sleByte, VER(31)), MKLINE(Track, started, sleByte, VER(31)), MKLINE(Track, priority, sleInt32, VER(31)), MKLINE(Track, regionOffset, sleInt32, VER(31)), @@ -112,6 +114,7 @@ void IMuseDigital::saveOrLoad(Serializer *ser) { MKLINE(Track, curRegion, sleInt32, VER(31)), MKLINE(Track, curHookId, sleInt32, VER(31)), MKLINE(Track, volGroupId, sleInt32, VER(31)), + MKLINE(Track, soundType, sleInt32, VER(31)), MKLINE(Track, iteration, sleInt32, VER(31)), MKLINE(Track, mod, sleInt32, VER(31)), MKLINE(Track, mixerFlags, sleInt32, VER(31)), @@ -124,8 +127,25 @@ void IMuseDigital::saveOrLoad(Serializer *ser) { ser->_ref_me = this; ser->saveLoadEntries(this, mainEntries); - for (i = 0; i < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; i++) + for (i = 0; i < MAX_DIGITAL_TRACKS + MAX_DIGITAL_FADETRACKS; i++) { ser->saveLoadEntries(_track[i], trackEntries); + if (!ser->isSaving()) { + if (_track[i]->souStream) { + _track[i]->stream2 = NULL; + _track[i]->stream = NULL; + _track[i]->used = false; + } else { + _track[i]->soundHandle = _sound->openSound(_track[i]->soundId, + _track[i]->soundName, _track[i]->soundType, + _track[i]->volGroupId); + int32 streamBufferSize = _track[i]->iteration; + int freq = _sound->getFreq(_track[i]->soundHandle); + _track[i]->stream2 = NULL; + _track[i]->stream = makeAppendableAudioStream(freq, _track[i]->mixerFlags, streamBufferSize); + _vm->_mixer->playInputStream(&_track[i]->handle, _track[i]->stream, false, _track[i]->vol / 1000, _track[i]->pan, -1); + } + } + } } void IMuseDigital::callback() { diff --git a/scumm/imuse_digi/dimuse.h b/scumm/imuse_digi/dimuse.h index 7229a790c4..0a341e9eda 100644 --- a/scumm/imuse_digi/dimuse.h +++ b/scumm/imuse_digi/dimuse.h @@ -52,9 +52,11 @@ private: bool volFadeUsed; // int soundId; + char soundName[15]; bool used; bool toBeRemoved; bool started; + bool souStream; int priority; int32 regionOffset; int32 trackOffset; @@ -62,6 +64,7 @@ private: int curRegion; int curHookId; int volGroupId; + int soundType; int iteration; int mod; int32 mixerFlags; diff --git a/scumm/imuse_digi/dimuse_track.cpp b/scumm/imuse_digi/dimuse_track.cpp index 7b7ba91746..649c29e792 100644 --- a/scumm/imuse_digi/dimuse_track.cpp +++ b/scumm/imuse_digi/dimuse_track.cpp @@ -107,13 +107,18 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, _track[l]->mixerPan = 0; _track[l]->mixerVol = volume; _track[l]->toBeRemoved = false; + _track[l]->soundType = soundType; int bits = 0, freq = 0, channels = 0; if (input) { _track[l]->iteration = 0; + _track[l]->souStream = true; + _track[l]->soundName[0] = 0; // Do nothing here, we already have an audio stream } else { + _track[l]->souStream = false; + strcpy(_track[l]->soundName, soundName); _track[l]->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId); if (_track[l]->soundHandle == NULL) @@ -150,7 +155,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, } if (input) { - _track[l]->stream2 = input; + _track[l]->stream2 = NULL; _track[l]->stream = NULL; _track[l]->started = false; } else { -- cgit v1.2.3