void Music::changeMusic(const Common::String filename, bool storeCurPos, bool seektoStoredPos) { if (storeCurPos) _storedPos = _musicFile->pos(); stopSoundEffect(); freeMusic(); _musicFile = _vm->_resource->openDataFile(filename); if (seektoStoredPos) _musicFile->seek(_storedPos); Audio::SeekableAudioStream *audioStream = Audio::makePCMStream(_musicFile, SAMPLESPEED, getSoundFlags()); _vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &_musicHandle, new Audio::LoopingAudioStream(audioStream, 0)); }
void Music::loadSoundEffect(const Common::String filename, bool loop, bool waitTillFinished) { stopSoundEffect(); Common::File *file = _vm->_resource->openDataFile(filename, MKTAG('D', 'I', 'F', 'F')); if (!file) return; _vm->_anim->_doBlack = false; uint32 magicBytes = file->readUint32LE(); if (magicBytes != 1219009121) { warning("readSound: Bad signature, skipping"); return; } uint32 soundTag = file->readUint32LE(); uint32 soundSize = file->readUint32LE(); if (soundTag != 0) return; file->skip(soundSize); // skip the header while (soundTag != 65535) { _vm->updateEvents(); soundTag = file->readUint32LE(); soundSize = file->readUint32LE() - 8; if ((soundTag == 30) || (soundTag == 31)) { if (waitTillFinished) { while (isSoundEffectActive()) { _vm->updateEvents(); _vm->waitTOF(); } } file->skip(4); uint16 sampleRate = file->readUint16LE(); file->skip(2); playSoundEffect(sampleRate, soundSize, loop, file); } else if (soundTag == 65535) { if (waitTillFinished) { while (isSoundEffectActive()) { _vm->updateEvents(); _vm->waitTOF(); } } } else file->skip(soundSize); } }