mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-18 07:39:08 +00:00
673862dbfd
an in-memory WAV file. At the moment it's only used in one place, which is a bit silly, but I hope to use it for the cutscene player to figure out when to start the lead-out music. (To do that I'll need to know how long the cutscene is, though. I haven't looked into how to find that out yet.) svn-id: r12424
169 lines
4.0 KiB
C++
169 lines
4.0 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 WavInfo {
|
|
uint8 channels;
|
|
uint16 rate;
|
|
uint32 samples;
|
|
uint8 *data;
|
|
};
|
|
|
|
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);
|
|
|
|
bool getWavInfo(uint8 *data, WavInfo *wavInfo);
|
|
|
|
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
|