1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
/* 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.
*
*/
#ifndef TITANIC_SOUND_H
#define TITANIC_SOUND_H
#include "titanic/support/simple_file.h"
#include "titanic/sound/proximity.h"
#include "titanic/sound/sound_manager.h"
#include "titanic/sound/wave_file.h"
#include "titanic/core/list.h"
#include "titanic/core/view_item.h"
#include "titanic/true_talk/dialogue_file.h"
namespace Titanic {
class CGameManager;
class CSoundItem : public ListItem {
public:
CString _name;
CWaveFile *_waveFile;
File *_dialogueFileHandle;
int _speechId;
DisposeAfterUse::Flag _disposeAfterUse;
bool _active;
public:
CSoundItem() : ListItem(), _waveFile(nullptr), _dialogueFileHandle(nullptr),
_speechId(0), _disposeAfterUse(DisposeAfterUse::NO), _active(false) {}
CSoundItem(const CString &name) : ListItem(), _name(name), _waveFile(nullptr),
_dialogueFileHandle(nullptr), _disposeAfterUse(DisposeAfterUse::NO),
_speechId(0), _active(false) {}
CSoundItem(File *dialogueFile, int speechId) : ListItem(), _waveFile(nullptr),
_dialogueFileHandle(dialogueFile), _speechId(speechId), _active(false),
_disposeAfterUse(DisposeAfterUse::NO) {}
virtual ~CSoundItem();
};
class CSoundItemList : public List<CSoundItem> {
};
class CSound {
private:
CGameManager *_gameManager;
CSoundItemList _sounds;
private:
/**
* Check whether any sounds are done and can be be removed
*/
void checkSounds();
/**
* Removes the oldest sound from the sounds list that isn't
* currently playing
*/
void removeOldest();
public:
QSoundManager _soundManager;
public:
CSound(CGameManager *owner, Audio::Mixer *mixer);
~CSound();
/**
* Save the data for the class to file
*/
void save(SimpleFile *file) const;
/**
* Load the data for the class from file
*/
void load(SimpleFile *file);
/**
* Called when a game is about to be loaded
*/
void preLoad();
/**
* Called when loading a game is complete
*/
void postLoad() { _soundManager.postLoad(); }
/**
* Called when a game is about to be saved
*/
void preSave() { _soundManager.preSave(); }
/**
* Called when a game has finished being saved
*/
void postSave() { _soundManager.postSave(); }
/**
* Called when the view has been changed
*/
void preEnterView(CViewItem *newView, bool isNewRoom);
/**
* Returns true if a sound with the specified handle is active
*/
bool isActive(int handle);
/**
* Sets the volume for a sound
* @param handle Sound handle
* @param volume Volume percentage (0 to 100)
* @param seconds Number of seconds to transition to the new volume
*/
void setVolume(uint handle, uint volume, uint seconds);
/**
* Flags a sound about to be played as activated
*/
void activateSound(CWaveFile *waveFile,
DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::NO);
/**
* Stops any sounds attached to a given channel
*/
void stopChannel(int channel);
/**
* Loads a TrueTalk dialogue
* @param dialogueFile Dialogue file reference
* @param speechId Speech Id within dialogue
* @returns Wave file instance
*/
CWaveFile *getTrueTalkSound(CDialogueFile *dialogueFile, int index);
/**
* Load a speech resource
* @param dialogueFile Dialogue file reference
* @param speechId Speech Id within dialogue
* @returns Wave file instance
*/
CWaveFile *loadSpeech(CDialogueFile *dialogueFile, int speechId);
/**
* Play a speech
* @param dialogueFile Dialogue file reference
* @param speechId Speech Id within dialogue
* @param prox Proximity instance
*/
int playSpeech(CDialogueFile *dialogueFile, int speechId, CProximity &prox);
/**
* Load a sound
* @param name Name of sound resource
* @returns Sound item record
*/
CWaveFile *loadSound(const CString &name);
/**
* Play a sound
*/
int playSound(const CString &name, CProximity &prox);
/**
* Stop a sound
*/
void stopSound(uint handle);
/**
* Flags that a sound can be freed if a timeout is set
*/
void setCanFree(int handle);
/**
* Handles regularly updating the mixer
*/
void updateMixer();
};
} // End of namespace Titanic
#endif /* TITANIC_SOUND_H */
|