aboutsummaryrefslogtreecommitdiff
path: root/engines/hugo/sound.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hugo/sound.h')
-rw-r--r--engines/hugo/sound.h47
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: