Ticket #8613: imuse-mixer-flags.diff
File imuse-mixer-flags.diff, 5.9 KB (added by , 18 years ago) |
---|
-
engines/scumm/imuse_digi/dimuse.cpp
76 76 free(_audioNames); 77 77 } 78 78 79 int32 IMuseDigital::makeMixerFlags(int32 flags) { 80 int32 mixerFlags = 0; 81 if (flags & kFlagUnsigned) 82 mixerFlags |= Audio::Mixer::FLAG_UNSIGNED; 83 if (flags & kFlag16Bits) 84 mixerFlags |= Audio::Mixer::FLAG_16BITS; 85 if (flags & kFlagLittleEndian) 86 mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN; 87 if (flags & kFlagStereo) 88 mixerFlags |= Audio::Mixer::FLAG_STEREO; 89 if (flags & kFlagReverseStereo) 90 mixerFlags |= Audio::Mixer::FLAG_REVERSE_STEREO; 91 return mixerFlags; 92 } 93 79 94 void IMuseDigital::resetState() { 80 95 _curMusicState = 0; 81 96 _curMusicSeq = 0; … … 122 137 MKLINE(Track, soundType, sleInt32, VER(31)), 123 138 MKLINE(Track, iteration, sleInt32, VER(31)), 124 139 MKLINE(Track, mod, sleInt32, VER(31)), 125 MKLINE(Track, mixerFlags, sleInt32, VER(31)),140 MKLINE(Track, flags, sleInt32, VER(31)), 126 141 MK_OBSOLETE(Track, mixerVol, sleInt32, VER(31), VER(42)), 127 142 MK_OBSOLETE(Track, mixerPan, sleInt32, VER(31), VER(42)), 128 143 MKLINE(Track, compressed, sleByte, VER(45)), … … 171 186 int channels = _sound->getChannels(track->soundHandle); 172 187 int freq = _sound->getFreq(track->soundHandle); 173 188 track->iteration = freq * channels; 174 track-> mixerFlags = 0;189 track->flags = 0; 175 190 if (channels == 2) 176 track-> mixerFlags = Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_REVERSE_STEREO;191 track->flags = kFlagStereo | kFlagReverseStereo; 177 192 178 193 if ((bits == 12) || (bits == 16)) { 179 track-> mixerFlags |= Audio::Mixer::FLAG_16BITS;194 track->flags |= kFlag16Bits; 180 195 track->iteration *= 2; 181 196 } else if (bits == 8) { 182 track-> mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;197 track->flags |= kFlagUnsigned; 183 198 } else 184 199 error("IMuseDigital::saveOrLoad(): Can't handle %d bit samples", bits); 185 200 186 201 #ifdef SCUMM_LITTLE_ENDIAN 187 202 if (track->compressed) 188 track-> mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;203 track->flags |= kFlagLittleEndian; 189 204 #endif 190 205 191 206 track->stream2 = NULL; 192 track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags);207 track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags)); 193 208 194 209 const int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0; 195 210 const int vol = track->vol / 1000; -
engines/scumm/imuse_digi/dimuse_track.cpp
103 103 track->dataOffset = 0; 104 104 track->regionOffset = 0; 105 105 track->mod = 0; 106 track-> mixerFlags = 0;106 track->flags = 0; 107 107 track->toBeRemoved = false; 108 108 track->readyToRemove = false; 109 109 track->soundType = soundType; … … 143 143 144 144 track->iteration = freq * channels; 145 145 if (channels == 2) 146 track-> mixerFlags = Audio::Mixer::FLAG_STEREO | Audio::Mixer::FLAG_REVERSE_STEREO;146 track->flags = kFlagStereo | kFlagReverseStereo; 147 147 148 148 if ((bits == 12) || (bits == 16)) { 149 track-> mixerFlags |= Audio::Mixer::FLAG_16BITS;149 track->flags |= kFlag16Bits; 150 150 track->iteration *= 2; 151 151 } else if (bits == 8) { 152 track-> mixerFlags |= Audio::Mixer::FLAG_UNSIGNED;152 track->flags |= kFlagUnsigned; 153 153 } else 154 154 error("IMuseDigital::startSound(): Can't handle %d bit samples", bits); 155 155 156 156 #ifdef SCUMM_LITTLE_ENDIAN 157 157 if (track->compressed) 158 track-> mixerFlags |= Audio::Mixer::FLAG_LITTLE_ENDIAN;158 track->flags |= kFlagLittleEndian; 159 159 #endif 160 160 } 161 161 … … 177 177 178 178 // setup 1 second stream wrapped buffer 179 179 track->stream2 = NULL; 180 track->stream = Audio::makeAppendableAudioStream(freq, track->mixerFlags);180 track->stream = Audio::makeAppendableAudioStream(freq, makeMixerFlags(track->flags)); 181 181 _mixer->playInputStream(type, &track->handle, track->stream, -1, vol, pan, false); 182 182 track->started = true; 183 183 } … … 328 328 fadeTrack->curRegion = track->curRegion; 329 329 fadeTrack->curHookId = track->curHookId; 330 330 fadeTrack->iteration = track->iteration; 331 fadeTrack-> mixerFlags = track->mixerFlags;331 fadeTrack->flags = track->flags; 332 332 fadeTrack->mod = track->mod; 333 333 fadeTrack->toBeRemoved = track->toBeRemoved; 334 334 fadeTrack->readyToRemove = track->readyToRemove; … … 355 355 type = Audio::Mixer::kMusicSoundType; 356 356 357 357 // setup 1 second stream wrapped buffer 358 fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), fadeTrack->mixerFlags);358 fadeTrack->stream = Audio::makeAppendableAudioStream(_sound->getFreq(fadeTrack->soundHandle), makeMixerFlags(fadeTrack->flags)); 359 359 _mixer->playInputStream(type, &fadeTrack->handle, fadeTrack->stream, -1, fadeTrack->vol / 1000, fadeTrack->pan, false); 360 360 fadeTrack->started = true; 361 361 fadeTrack->used = true; -
engines/scumm/imuse_digi/dimuse.h
44 44 class Serializer; 45 45 class ScummEngine_v7; 46 46 47 // These flag bits correspond exactly to the sound mixer flags of March 2007. 48 // We define our own so that savegames won't break, even if the mixer flags 49 // change after this point. 50 51 enum { 52 kFlagUnsigned = 1 << 0, 53 kFlag16Bits = 1 << 1, 54 kFlagLittleEndian = 1 << 2, 55 kFlagStereo = 1 << 3, 56 kFlagReverseStereo = 1 << 4 57 58 // kFlagAutoFree = 1 << 5, 59 // kFlagLoop = 1 << 6 60 }; 61 47 62 class IMuseDigital : public MusicEngine { 48 63 private: 49 64 … … 76 91 int32 soundType; 77 92 int32 iteration; 78 93 int32 mod; 79 int32 mixerFlags;94 int32 flags; 80 95 81 96 ImuseDigiSndMgr::soundStruct *soundHandle; 82 97 Audio::SoundHandle handle; … … 104 119 int32 _curMusicSeq; 105 120 int32 _curMusicCue; 106 121 122 int32 makeMixerFlags(int32 flags); 107 123 static void timer_handler(void *refConf); 108 124 void callback(); 109 125 void switchToNextRegion(Track *track);