ScummVM API documentation
sound.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 * Additional copyright for this file:
8 * Copyright (C) 1995 Presto Studios, Inc.
9 *
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 *
23 */
24
25#ifndef BURIED_SOUND_H
26#define BURIED_SOUND_H
27
28#include "audio/mixer.h"
29#include "common/str.h"
30
31namespace Audio {
32class RewindableAudioStream;
33class SoundHandle;
34}
35
36namespace Buried {
37
38class BuriedEngine;
39
41public:
44
45 // STARTUP/SHUTDOWN FUNCTIONS
46 bool startup();
47 void shutDown();
48
49 // AMBIENT SOUND CHANNEL FUNCTIONS
50 bool setAmbientSound(const Common::Path &fileName = Common::Path(), bool fade = false, byte finalVolumeLevel = 64);
51 bool adjustAmbientSoundVolume(byte newVolumeLevel, bool fade, byte steps, uint32 fadeLength);
52 bool isAmbientSoundPlaying();
53
54 bool setSecondaryAmbientSound(const Common::Path &fileName = Common::Path(), bool fade = false, byte finalVolumeLevel = 64);
55 bool adjustSecondaryAmbientSoundVolume(byte newVolumeLevel, bool fade, byte steps, uint32 fadeLength);
56 uint32 getSecondaryAmbientPosition();
57 bool restartSecondaryAmbientSound();
58
59 // AI SOUND CHANNEL FUNCTIONS
60 bool playSynchronousAIComment(const Common::Path &fileName);
61 bool playAsynchronousAIComment(const Common::Path &fileName);
62 bool isAsynchronousAICommentPlaying();
63 void stopAsynchronousAIComment();
64
65 // SOUND EFFECTS FUNCTIONS
66 int playSoundEffect(const Common::Path &fileName, int volume = 127, bool loop = false, bool oneShot = true);
67 bool playSynchronousSoundEffect(const Common::Path &fileName, int volume = 127);
68 bool stopSoundEffect(int effectID);
69 bool isSoundEffectPlaying (int effectID);
70 bool adjustSoundEffectSoundVolume(int effectID, byte newVolumeLevel, bool fade, byte steps, uint32 fadeLength);
71
72 // Interface sound functions
73 bool playInterfaceSound(const Common::Path &fileName);
74 bool stopInterfaceSound();
75 bool isInterfaceSoundPlaying();
76
77 // START AND STOP SPECIFIED FOOTSTEPS SOUND
78 bool startFootsteps(int footstepsID);
79 bool stopFootsteps();
80
81 // Pause functions
82 // stop()/restart() do as they say on the tin and aren't true pause functions.
83 // This is what the original does for pausing, and it needs to be done this way.
84 // pause() is used for implementing pauseEngineIntern(). Since stop()/restart()
85 // are not re-entrant, they're not suitable for that purpose.
86 bool stop();
87 void stopSound(int soundId);
88 bool restart();
89 void pause(bool shouldPause);
90
91 // TIMER CALLBACK FUNCTION
92 void timerCallback();
93
94private:
95 enum {
96 kAmbientIndexBase = 0,
97 kAmbientIndexA = 0,
98 kAmbientIndexB = 1,
99
100 kEffectsIndexBase = 2,
101 kEffectsIndexA = 2,
102 kEffectsIndexB = 3,
103
104 kInterfaceIndex = 4,
105 kAIVoiceIndex = 5,
106 kFootstepsIndex = 6,
107
108 kMaxSounds = 7
109 };
110
111 class Sound {
112 friend class SoundManager;
113
114 public:
115 Sound();
116 ~Sound();
117
118 bool load(const Common::Path &fileName);
119 bool start();
120 bool isPlaying() const;
121 bool stop();
122 void pause(bool shouldPause);
123
124 protected:
125 Audio::RewindableAudioStream *_soundData; // Stream to the data
126 Audio::SoundHandle *_handle; // Handle
127
128 int32 _volume; // Volume of this sample
129 bool _loop; // Is this sample looping?
130 byte _flags; // Sound flags
131 byte _timedEffectIndex; // Timed effect index
132 int _timedEffectSteps; // Number of steps remaining in timed effect
133 int32 _timedEffectDelta; // Amount to change target value in each step
134 uint32 _timedEffectStart; // The last starting time for the timed effect
135 uint32 _timedEffectRemaining; // The remaining amount of time for the effect
136
137 bool _wasPlaying;
138 Audio::Mixer::SoundType _soundType;
139 };
140
141 BuriedEngine *_vm;
142
143 Sound *_soundData[kMaxSounds];
144
145 bool _paused;
146
147 int _fileIDFootsteps;
148 Common::Path _ambientFileNames[2];
149 int _lastAmbient;
150 Common::Path _effectsFileNames[2];
151 Common::Path _interfaceFileName;
152 Common::Path _arthurFileName;
153};
154
155} // End of namespace Buried
156
157#endif
SoundType
Definition: mixer.h:73
Definition: audiostream.h:109
Definition: mixer.h:49
Definition: buried.h:96
Definition: sound.h:40
Definition: path.h:52
Definition: system.h:39