bool AIFFTrack::play() { if (_stream) { Audio::RewindableAudioStream *stream = static_cast<Audio::RewindableAudioStream *>(_stream); if (!_looping) { stream->rewind(); } return SoundTrack::play(); } return false; }
MusicNode::MusicNode(ZVision *engine, uint32 key, Common::String &filename, bool loop, int8 volume) : MusicNodeBASE(engine, key, SCRIPTING_EFFECT_AUDIO) { _loop = loop; _volume = volume; _crossfade = false; _crossfadeTarget = 0; _crossfadeTime = 0; _attenuate = 0; _pantrack = false; _pantrackPosition = 0; _sub = NULL; _stereo = false; _loaded = false; Audio::RewindableAudioStream *audioStream = NULL; if (filename.contains(".wav")) { Common::File *file = new Common::File(); if (_engine->getSearchManager()->openFile(*file, filename)) { audioStream = Audio::makeWAVStream(file, DisposeAfterUse::YES); } } else { audioStream = makeRawZorkStream(filename, _engine); } if (audioStream) { _stereo = audioStream->isStereo(); if (_loop) { Audio::LoopingAudioStream *loopingAudioStream = new Audio::LoopingAudioStream(audioStream, 0, DisposeAfterUse::YES); _engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, loopingAudioStream, -1, _volume); } else { _engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, audioStream, -1, _volume); } if (_key != StateKey_NotSet) _engine->getScriptManager()->setStateValue(_key, 1); // Change filename.raw into filename.sub Common::String subname = filename; subname.setChar('s', subname.size() - 3); subname.setChar('u', subname.size() - 2); subname.setChar('b', subname.size() - 1); if (_engine->getSearchManager()->hasFile(subname)) _sub = new Subtitle(_engine, subname); _loaded = true; } }
bool VideoDecoder::RewindableAudioTrack::rewind() { Audio::RewindableAudioStream *stream = getRewindableAudioStream(); assert(stream); return stream->rewind(); }