diff options
author | Eugene Sandulenko | 2007-02-21 21:42:37 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2007-02-21 21:42:37 +0000 |
commit | b825fb858f204bfd07eaff77dee3100eb1b893bf (patch) | |
tree | 275ecee2b1dfecb3628ea5c7127a3890ced46999 /engines/parallaction/music.h | |
parent | b2539cc19cf569bedc1521173943fe5693fad322 (diff) | |
download | scummvm-rg350-b825fb858f204bfd07eaff77dee3100eb1b893bf.tar.gz scummvm-rg350-b825fb858f204bfd07eaff77dee3100eb1b893bf.tar.bz2 scummvm-rg350-b825fb858f204bfd07eaff77dee3100eb1b893bf.zip |
Add support for MIDI music. THough the music is not yet heard since
there are no instrument assignments yet.
svn-id: r25774
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 |