From cf82bef02ee2941ddad6664e34f3c94e35e015a3 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 8 Oct 2010 22:30:39 +0000 Subject: TOON: Merged Toon engine to ScummVM trunk svn-id: r53087 --- engines/toon/audio.h | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 engines/toon/audio.h (limited to 'engines/toon/audio.h') diff --git a/engines/toon/audio.h b/engines/toon/audio.h new file mode 100644 index 0000000000..178e8162c7 --- /dev/null +++ b/engines/toon/audio.h @@ -0,0 +1,143 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef TOON_AUDIO_H +#define TOON_AUDIO_H + +#include "sound/audiostream.h" +#include "sound/mixer.h" +#include "toon.h" + +namespace Toon { + +// used for music/voice/everything +class AudioManager; +class AudioStreamInstance : public Audio::AudioStream { + +public: + AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, Common::SeekableReadStream *stream, bool looping = false); + ~AudioStreamInstance(); + void play(bool fade = false, Audio::Mixer::SoundType soundType = Audio::Mixer::kMusicSoundType); + void stop(bool fade = false); + + bool isPlaying() { + return !_stopped; + } + bool isLooping() { + return _looping; + } + bool isFading() { + return _fadingIn || _fadingOut; + } + + void setVolume(int32 volume); +protected: + int32 readBuffer(int16 *buffer, const int numSamples); + bool isStereo() const { + return false; + }; + int getRate() const { + return 22100; + }; + bool endOfData() const { + return _stopped; + }; + void handleFade(int32 numSamples); + void stopNow(); + + bool readPacket(); + void decodeADPCM(uint8 *comp, int16 *dest, int32 packetSize); + + Common::SeekableReadStream *_file; + bool _fadingIn; + bool _fadingOut; + int32 _fadeTime; + uint8 *_compBuffer; + int16 *_buffer; + int32 _bufferSize; + int32 _bufferMaxSize; + int32 _bufferOffset; + int32 _compBufferSize; + Audio::SoundHandle _handle; + Audio::Mixer *_mixer; + int32 _lastADPCMval1; + int32 _lastADPCMval2; + bool _stopped; + AudioManager *_man; + int32 _totalSize; + int32 _currentReadSize; + bool _looping; + int32 _volume; +}; + +class AudioStreamPackage { + +public: + AudioStreamPackage(ToonEngine *vm); + bool loadAudioPackage(Common::String indexFile, Common::String streamFile); + void getInfo(int32 id, int32 *offset, int32 *size); + Common::SeekableReadStream *getStream(int32 id, bool ownMemory = false); +protected: + Common::SeekableReadStream *_file; + uint32 *_indexBuffer; + ToonEngine *_vm; +}; + +class AudioManager { +public: + void removeInstance(AudioStreamInstance *inst); // called by destructor + + AudioManager(ToonEngine *vm, Audio::Mixer *mixer); + ~AudioManager(void); + + bool voiceStillPlaying(); + + void playMusic(Common::String dir, Common::String music); + void playVoice(int32 id, bool genericVoice); + void playSFX(int32 id, int volume, bool genericSFX); + void stopCurrentVoice(); + void setMusicVolume(int32 volume); + void stopMusic(); + + + bool loadAudioPack(int32 id, Common::String indexFile, Common::String packFile); + + AudioStreamInstance *_channels[16]; // 0-1 : music + // 2 : voice + // 3-16 : SFX + + AudioStreamPackage *_audioPacks[4]; // 0 : generic streams + // 1 : local streams + // 2 : generic SFX + // 3 : local SFX + uint32 _currentMusicChannel; + Common::String _currentMusicName; + ToonEngine *_vm; + Audio::Mixer *_mixer; +}; + +} // End of namespace Toon + +#endif -- cgit v1.2.3