scummvm/sword2/driver/d_sound.h
Torbjörn Andersson 065f2bb9eb It's a new year in BS2 land, too!
svn-id: r12181
2004-01-06 13:44:17 +00:00

160 lines
3.9 KiB
C++

/* Copyright (C) 1994-2004 Revolution Software Ltd
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header$
*/
#ifndef D_SOUND_H
#define D_SOUND_H
#include "sound/audiostream.h"
#include "sound/mixer.h"
class RateConverter;
namespace Sword2 {
// Max number of sound fx
#define MAXFX 16
#define MAXMUS 2
extern void sword2_sound_handler(void *refCon);
struct FxHandle {
int32 _id;
bool _paused;
int8 _volume;
uint16 _rate;
uint32 _flags;
uint16 *_buf;
int32 _bufSize;
PlayingSoundHandle _handle;
};
class MusicHandle : public AudioStream {
public:
bool _firstTime;
bool _streaming;
bool _paused;
bool _looping;
int32 _fading;
int32 _fileStart;
int32 _filePos;
int32 _fileEnd;
uint16 _lastSample;
bool isStereo(void) const { return false; }
int getRate(void) const { return 22050; }
void fadeDown(void);
void fadeUp(void);
int32 play(const char *filename, uint32 musicId, bool looping);
void stop(void);
int readBuffer(int16 *buffer, const int numSamples);
bool endOfData(void) const;
// This stream never 'ends'
bool endOfStream(void) const { return false; }
MusicHandle() : _firstTime(false), _streaming(false), _paused(false),
_looping(false), _fading(0), _fileStart(0),
_filePos(0), _fileEnd(0), _lastSample(0) {}
};
class Sound {
private:
Sword2Engine *_vm;
OSystem::MutexRef _mutex;
int32 _panTable[33];
bool _soundOn;
static int32 _musicVolTable[17];
MusicHandle _music[MAXMUS + 1];
char *savedMusicFilename;
RateConverter *_converter;
bool _musicMuted;
uint8 _musicVol;
void updateCompSampleStreaming(int16 *data, uint len);
int32 dipMusic(void);
PlayingSoundHandle _soundHandleSpeech;
bool _speechStatus;
bool _speechPaused;
bool _speechMuted;
uint8 _speechVol;
FxHandle _fx[MAXFX];
bool _fxPaused;
bool _fxMuted;
uint8 _fxVol;
int32 getFxIndex(int32 id);
void stopFxHandle(int i);
public:
Sound(Sword2Engine *vm);
~Sound();
void fxServer(int16 *data, uint len);
void buildPanTable(bool reverse);
void muteMusic(bool mute);
bool isMusicMute(void);
void setMusicVolume(uint8 vol);
uint8 getMusicVolume(void);
void pauseMusic(void);
void unpauseMusic(void);
void stopMusic(void);
void saveMusicState(void);
void restoreMusicState(void);
void playLeadOut(uint8 *leadOut);
int32 streamCompMusic(const char *filename, uint32 musicId, bool looping);
int32 musicTimeRemaining(void);
void muteSpeech(bool mute);
bool isSpeechMute(void);
void setSpeechVolume(uint8 vol);
uint8 getSpeechVolume(void);
void pauseSpeech(void);
void unpauseSpeech(void);
int32 stopSpeech(void);
int32 getSpeechStatus(void);
int32 amISpeaking(void);
uint32 preFetchCompSpeech(const char *filename, uint32 speechid, uint16 **buf);
int32 playCompSpeech(const char *filename, uint32 speechid, uint8 vol, int8 pan);
void muteFx(bool mute);
bool isFxMute(void);
uint8 getFxVolume(void);
void setFxVolume(uint8 vol);
int32 setFxIdVolumePan(int32 id, uint8 vol, int8 pan);
int32 setFxIdVolume(int32 id, uint8 vol);
void pauseFx(void);
void pauseFxForSequence(void);
void unpauseFx(void);
bool isFxPlaying(int32 id);
int32 openFx(int32 id, uint8 *data);
int32 closeFx(int32 id);
int32 playFx(int32 id, uint8 *data, uint8 vol, int8 pan, uint8 type);
void clearAllFx(void);
};
} // End of namespace Sword2
#endif