scummvm/sword2/driver/d_sound.h

160 lines
3.9 KiB
C
Raw Normal View History

/* Copyright (C) 1994-2004 Revolution Software Ltd
2003-07-28 01:47:41 +00:00
*
* 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;
2003-10-04 00:52:27 +00:00
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);
2004-01-03 19:12:23 +00:00
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;
2003-11-02 10:12:08 +00:00
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);
};
2003-07-28 01:47:41 +00:00
2003-10-04 00:52:27 +00:00
} // End of namespace Sword2
2003-07-28 01:47:41 +00:00
#endif