diff options
Diffstat (limited to 'engines/parallaction/music.h')
-rw-r--r-- | engines/parallaction/music.h | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/engines/parallaction/music.h b/engines/parallaction/music.h index 4f3f211002..eef249a7d4 100644 --- a/engines/parallaction/music.h +++ b/engines/parallaction/music.h @@ -23,11 +23,57 @@ #ifndef PARALLACTION_MUSIC_H #define PARALLACTION_MUSIC_H +#include "common/util.h" +#include "common/mutex.h" + +#include "sound/mididrv.h" + +class MidiParser; + namespace Parallaction { -void stopMusic(); -void playMusic(); -void loadMusic(const char *filename); +class MidiPlayer : public MidiDriver { +public: + + enum { + NUM_CHANNELS = 16 + }; + + MidiPlayer(MidiDriver *driver); + ~MidiPlayer(); + + void play(const char *filename); + void stop(); + 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; + int _masterVolume; + MidiChannel *_channelsTable[NUM_CHANNELS]; + uint8 _channelsVolume[NUM_CHANNELS]; + Common::Mutex _mutex; +}; } // namespace Parallaction |