diff options
Diffstat (limited to 'engines/gob/sound.h')
-rw-r--r-- | engines/gob/sound.h | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/engines/gob/sound.h b/engines/gob/sound.h index 5b32569ac1..dd059b44ee 100644 --- a/engines/gob/sound.h +++ b/engines/gob/sound.h @@ -28,7 +28,7 @@ namespace Gob { -class Snd { +class Snd : public Audio::AudioStream { public: struct SoundDesc { Audio::SoundHandle handle; @@ -45,7 +45,6 @@ public: typedef void (*CleanupFuncPtr) (int16); - SoundDesc *_loopingSounds[10]; // Should be enough char _playingSound; CleanupFuncPtr _cleanupFunc; @@ -53,16 +52,23 @@ public: void speakerOn(int16 frequency, int32 length); void speakerOff(void); SoundDesc *loadSoundData(const char *path); - void stopSound(int16 arg){return;} - void loopSounds(void); + void stopSound(int16 arg); void playSample(SoundDesc *sndDesc, int16 repCount, int16 frequency); - void playComposition(Snd::SoundDesc ** samples, int16 *composit, int16 freqVal) {;} - void waitEndPlay(void) {;} + void playComposition(int16 *composition, int16 freqVal); + void stopComposition(void); + int8 getCompositionSlot(void); + void waitEndPlay(void); // This deletes sndDesc and stops playing the sample. // If freedata is set, it also delete[]s the sample data. void freeSoundDesc(SoundDesc *sndDesc, bool freedata=true); + int readBuffer(int16 *buffer, const int numSamples); + bool isStereo() const { return false; } + bool endOfData() const { return _end; } + bool endOfStream() const { return false; } + int getRate() const { return _rate; } + protected: // TODO: This is a very primitive square wave generator. The only thing is // has in common with the PC speaker is that it sounds terrible. @@ -91,6 +97,26 @@ protected: SquareWaveStream _speakerStream; Audio::SoundHandle _speakerHandle; + Audio::SoundHandle *_activeHandle; + Audio::SoundHandle _compositionHandle; + int16 _composition[50]; + int8 _compositionPos; + + Audio::SoundHandle _handle; + Common::Mutex _mutex; + SoundDesc *_curSoundDesc; + bool _end; + int8 *_data; + uint32 _length; + uint32 _rate; + int32 _freq; + int32 _repCount; + double _offset; + double _ratio; + double _frac; + int16 _cur; + int16 _last; + GobEngine *_vm; void cleanupFuncCallback() {;} @@ -101,6 +127,9 @@ protected: void writeAdlib(int16 port, int16 data); void setBlasterPort(int16 port); void setResetTimerFlag(char flag){return;} + void setSample(Snd::SoundDesc *sndDesc, int16 repCount, int16 frequency); + void checkEndSample(void); + void nextCompositionPos(void); }; } // End of namespace Gob |