ScummVM API documentation
audio.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 *
21 * This file is dual-licensed.
22 * In addition to the GPLv3 license mentioned above, MojoTouch has
23 * exclusively licensed this code on March 23th, 2024, to be used in
24 * closed-source products.
25 * Therefore, any contributions (commits) to it will also be dual-licensed.
26 *
27 */
28
29#ifndef TOON_AUDIO_H
30#define TOON_AUDIO_H
31
32#include "audio/audiostream.h"
33#include "audio/mixer.h"
34#include "toon/toon.h"
35
36namespace Toon {
37
38// used for music/voice/everything
39class AudioManager;
41
42public:
43 AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, Common::SeekableReadStream *stream, bool looping = false, bool deleteFileStreamAtEnd = false);
44 ~AudioStreamInstance() override;
45 void play(bool fade = false, Audio::Mixer::SoundType soundType = Audio::Mixer::kMusicSoundType);
46 void stop(bool fade = false);
47
48 bool isPlaying() {
49 return !_stopped;
50 }
51 bool isLooping() {
52 return _looping;
53 }
54 bool isFading() {
55 return _fadingIn || _fadingOut;
56 }
57
58 int32 getPlayedSampleCount() {
59 return _playedSamples;
60 }
61
62 void setVolume(int32 volume);
63protected:
64 int readBuffer(int16 *buffer, const int numSamples) override;
65 bool isStereo() const override {
66 return false;
67 }
68 int getRate() const override {
69 return 22100;
70 }
71 bool endOfData() const override {
72 return _stopped;
73 }
74 void handleFade(int32 numSamples);
75 void stopNow();
76
77 bool readPacket();
78 void decodeADPCM(uint8 *comp, int16 *dest, int32 packetSize);
79
81 bool _fadingIn;
82 bool _fadingOut;
83 int32 _fadeTime;
84 uint8 *_compBuffer;
85 int16 *_buffer;
86 int32 _bufferSize;
87 int32 _bufferMaxSize;
88 int32 _bufferOffset;
89 int32 _compBufferSize;
90 Audio::SoundHandle _handle;
91 Audio::Mixer::SoundType _soundType;
92 Audio::Mixer *_mixer;
93 int32 _lastSample;
94 int32 _lastStepIndex;
95 bool _stopped;
96 AudioManager *_man;
97 int32 _totalSize;
98 int32 _currentReadSize;
99 bool _looping;
100 int32 _volume;
101 int32 _musicAttenuation;
102 bool _deleteFileStream;
103 int32 _playedSamples;
104};
105
107
108public:
111
112 bool loadAudioPackage(const Common::Path &indexFile, const Common::Path &streamFile);
113 void getInfo(int32 id, int32 *offset, int32 *size);
114 Common::SeekableReadStream *getStream(int32 id, bool ownMemory = false);
115protected:
117 uint32 *_indexBuffer;
118 ToonEngine *_vm;
119};
120
122 int32 _id;
123 int32 _volume;
124 int32 _lastTimer;
125 int32 _delay;
126 int32 _mode;
127 int32 _channel;
128 bool _enabled;
129};
130
132public:
133 void removeInstance(AudioStreamInstance *inst); // called by destructor
134
137
138 bool voiceStillPlaying();
139
140 int playMusic(const Common::String &dir, const Common::String &music);
141 void playVoice(int32 id, bool genericVoice);
142 int32 playSFX(int32 id, int volume, bool genericSFX);
143 void stopCurrentVoice();
144 void stopAllSfxs();
145 void setMusicVolume(uint8 volume);
146 void stopMusicChannel(int channelId, bool fade);
147 void stopMusic(bool fade = true);
148 void muteVoice(bool mute);
149 void muteMusic(bool mute);
150 void muteSfx(bool mute);
151 bool isVoiceMuted() const { return _voiceMuted; }
152 bool isMusicMuted() const { return _musicMuted; }
153 bool isSfxMuted() const { return _sfxMuted; }
154
155 void startAmbientSFX(int32 id, int32 delay, int32 mode, int32 volume);
156 void killAmbientSFX(int32 id);
157 void killAllAmbientSFX();
158 void updateAmbientSFX();
159 void setAmbientSFXVolume(int32 id, int volume);
160
161 void closeAudioPack(int32 id);
162 bool loadAudioPack(int32 id, const Common::Path &indexFile, const Common::Path &packFile);
163
164 AudioStreamInstance *_channels[16]; // 0-1 : music
165 // 2 : voice
166 // 3-15 : SFX
167
168 AudioStreamPackage *_audioPacks[4]; // 0 : generic streams
169 // 1 : local streams
170 // 2 : generic SFX
171 // 3 : local SFX
172
173 int _currentMusicChannel;
174 Common::String _currentMusicName;
175 ToonEngine *_vm;
176 Audio::Mixer *_mixer;
177
178protected:
179 bool _voiceMuted;
180 bool _musicMuted;
181 bool _sfxMuted;
182
183 AudioAmbientSFX _ambientSFXs[4];
184};
185
186} // End of namespace Toon
187
188#endif
Definition: audiostream.h:50
Definition: mixer.h:70
SoundType
Definition: mixer.h:73
@ kMusicSoundType
Definition: mixer.h:76
Definition: mixer.h:49
Definition: path.h:52
Definition: stream.h:745
Definition: str.h:59
Definition: audio.h:131
Definition: audio.h:40
int getRate() const override
Definition: audio.h:68
bool isStereo() const override
Definition: audio.h:65
bool endOfData() const override
Definition: audio.h:71
int readBuffer(int16 *buffer, const int numSamples) override
Definition: audio.h:106
Definition: toon.h:118
Definition: anim.h:39
Definition: audio.h:121