diff options
Diffstat (limited to 'engines/hugo/sound.h')
-rw-r--r-- | engines/hugo/sound.h | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/engines/hugo/sound.h b/engines/hugo/sound.h index 202e497215..ab26e749a0 100644 --- a/engines/hugo/sound.h +++ b/engines/hugo/sound.h @@ -34,10 +34,55 @@ #define HUGO_SOUND_H #include "sound/mixer.h" +#include "sound/mididrv.h" +#include "sound/midiparser.h" namespace Hugo { -class MidiPlayer; +class MidiPlayer : public MidiDriver { +public: + + enum { + NUM_CHANNELS = 16 + }; + + MidiPlayer(MidiDriver *driver); + ~MidiPlayer(); + + void play(uint8 *stream, uint16 size); + void stop(); + void pause(bool p); + void updateTimer(); + void adjustVolume(int diff); + void setVolume(int volume); + int getVolume() const { return _masterVolume; } + void setLooping(bool loop) { _isLooping = loop; } + + // MidiDriver interface + int open(); + void close(); + void send(uint32 b); + void metaEvent(byte type, byte *data, uint16 length); + void setTimerCallback(void *timerParam, void (*timerProc)(void *)) { } + uint32 getBaseTempo() { return _driver ? _driver->getBaseTempo() : 0; } + MidiChannel *allocateChannel() { return 0; } + MidiChannel *getPercussionChannel() { return 0; } + +private: + + static void timerCallback(void *p); + + MidiDriver *_driver; + MidiParser *_parser; + uint8 *_midiData; + bool _isLooping; + bool _isPlaying; + bool _paused; + int _masterVolume; + MidiChannel *_channelsTable[NUM_CHANNELS]; + uint8 _channelsVolume[NUM_CHANNELS]; + Common::Mutex _mutex; +}; class SoundHandler { public: |