Calls script.
[scummvm-innocent.git] / engines / innocent / musicparser.h
blob216a6059c94f0bc37a58111b6be827d7a49ee561
1 #ifndef INNOCENT_MUSIC_H
2 #define INNOCENT_MUSIC_H
4 #include <vector>
6 #include "common/queue.h"
7 #include "common/singleton.h"
8 #include "sound/midiparser.h"
10 #include "innocent/value.h"
12 namespace Innocent {
15 class MusicCommand {
16 public:
17 enum Status {
18 kThxBye,
19 kCallMe
22 MusicCommand();
23 MusicCommand(const byte *code);
24 MusicCommand::Status parseNextEvent(EventInfo &info);
25 bool empty() const;
27 private:
28 byte _command, _parameter;
31 class Note {
32 public:
33 Note();
34 Note(const byte *data);
35 MusicCommand::Status parseNextEvent(EventInfo &info);
36 uint32 delta() const;
38 private:
39 const byte *_data;
40 uint32 _tick;
41 byte _note;
44 class Channel {
45 public:
46 Channel();
47 Channel(const byte *def, const byte *tune, byte chanidx);
48 MusicCommand::Status parseNextEvent(EventInfo &info);
49 uint32 delta() const;
51 private:
52 Note _notes[4];
53 MusicCommand _init[4];
54 bool _active, _not_initialized;
55 byte _initnote, _chanidx;
58 class Beat {
59 public:
60 Beat();
61 Beat(const byte *def, const byte *channels, const byte *tune);
62 MusicCommand::Status parseNextEvent(EventInfo &info);
64 private:
65 Channel _channels[8];
68 class Tune {
69 public:
70 Tune();
71 Tune(uint16 index);
72 MusicCommand::Status parseNextEvent(EventInfo &info);
74 private:
75 std::vector<Beat> _beats;
77 byte _data[6666];
78 int32 _currentBeat;
81 class MusicScript {
82 public:
83 MusicScript();
84 MusicScript(const byte *data);
85 void parseNextEvent(EventInfo &info);
87 private:
88 Tune _tune;
89 const byte *_code;
90 uint16 _offset;
93 class MusicParser : public MidiParser, public Common::Singleton<MusicParser> {
94 public:
95 MusicParser();
96 ~MusicParser();
98 bool loadMusic(byte *data, uint32 size = 0);
100 friend class Note;
101 protected:
102 void parseNextEvent(EventInfo &info);
104 private:
105 MusicScript _script;
108 #define Music MusicParser::instance()
112 #endif