Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
MmlParser.h
Go to the documentation of this file.
1#ifndef NW4HBM_SND_MML_PARSER_H
2#define NW4HBM_SND_MML_PARSER_H
3
4#include <revolution/types.h>
5#include "SeqTrack.h"
6
7
8namespace nw4hbm {
9 namespace snd {
10 namespace detail {
11
12 class MmlSeqTrack;
13 class SeqPlayer;
14
15 class MmlParser {
16 public:
24
25 static const int CALL_STACK_MAX_DEPTH = 3;
26
27 public:
28 /* 0x08 */ virtual void CommandProc(MmlSeqTrack* track, u32 command,
29 s32 commandArg1, s32 commandArg2) const;
30 /* 0x0C */ virtual Channel* NoteOnCommandProc(MmlSeqTrack* track, int key,
31 int velocity, s32 length,
32 bool tieFlag) const;
33
34 ParseResult Parse(MmlSeqTrack* track, bool doNoteOn) const;
35
36 vs16* GetVariablePtr(SeqPlayer* player, SeqTrack* track, int varNo) const;
37
38 static void EnablePrintVar(bool enable) { mPrintVarEnabledFlag = enable; }
39
40 private:
41 typedef enum MmlSeqData {
42 MML_CMD_MIN = 0x80, // <80 -> MML note, not a command
43
44 MML_WAIT = 0x80, // 0x80
46 MML_OPENTRACK = 0x88, // 0x88
47 MML_JUMP, // 0x89
48 MML_CALL, // 0x8A
49
50 MML_RNDPARAM = 0xA0, // 0xA0
51 MML_INDPARAM, // 0xA1
52 MML_EXECIF, // 0xA2
53
54 MML_SET_TIMEBASE = 0xB0, // 0xB0 (unused by this version)
55
56 MML_SET_PAN = 0xC0, // 0xC0
64 MML_SET_TIE, // 0xC8
72
73 MML_SET_ATTACK = 0xD0, // 0xD0
79 MML_PRINTVAR, // 0xD6
86 MML_SET_MUTE, // 0xDD
88 MML_SET_DAMPER, // 0xDF (unused by this version)
89
90 MML_SET_LFODELAY = 0xE0, // 0xE0
92 MML_CMD_E2h, // 0xE2
94
95 MML_LOOP_END = 0xFC, // 0xFC
96 MML_RET, // 0xFD
98 MML_EOF, // 0xFF
99
102
103 MML_CMD_MAX = 0xFF, // >FF -> EX command
104
105 // (MML_EX_COMMAND << 8) | Command
107
108 // MML EX arithmetic command set
109 MML_EX_ARITHMETIC = 0x80, // 0xF0 0x8X
110 MML_EX_SET = 0x80, // 0xF0 0x80
111 MML_EX_APL, // 0xF0 0x81
112 MML_EX_AMI, // 0xF0 0x82
113 MML_EX_AMU, // 0xF0 0x83
114 MML_EX_ADV, // 0xF0 0x84
115 MML_EX_ALS, // 0xF0 0x85
116 MML_EX_RND, // 0xF0 0x86
117 MML_EX_AAD, // 0xF0 0x87
118 MML_EX_AOR, // 0xF0 0x88
119 MML_EX_AER, // 0xF0 0x89
120 MML_EX_ACO, // 0xF0 0x8A
121 MML_EX_AMD, // 0xF0 0x8B
122
123 // MML EX logic command set
124 MML_EX_LOGIC = 0x90, // 0xF0 0x9X
125 MML_EX_EQ = 0x90, // 0xF0 0x90
126 MML_EX_GE, // 0xF0 0x91
127 MML_EX_GT, // 0xF0 0x92
128 MML_EX_LE, // 0xF0 0x93
129 MML_EX_LT, // 0xF0 0x94
130 MML_EX_NE, // 0xF0 0x95
131
132 // MML EX userproc callback
133 MML_EX_USERPROC = 0xE0, // 0xF0 0xE0
134
135 MML_EX_CMD_MAX = 0xFFFF, // >FFFF -> Invalid command
137
138 private:
139 u8 ReadByte(const u8** data) const { return *(*data)++; }
140
141 u16 Read16(const u8** data) const;
142 u32 Read24(const u8** data) const;
143 s32 ReadVar(const u8** data) const;
144 s32 ReadArg(const u8** data, SeqPlayer* player, SeqTrack* track,
145 SeqArgType type) const;
146
147 private:
149 };
150
151 } // namespace detail
152 } // namespace snd
153} // namespace nw4hbm
154
155#endif
Definition Channel.h:23
Definition MmlParser.h:15
u32 Read24(const u8 **data) const
SeqArgType
Definition MmlParser.h:17
@ SEQ_ARG_RANDOM
Definition MmlParser.h:21
@ SEQ_ARG_S16
Definition MmlParser.h:19
@ SEQ_ARG_VMIDI
Definition MmlParser.h:20
@ SEQ_ARG_U8
Definition MmlParser.h:18
@ SEQ_ARG_VARIABLE
Definition MmlParser.h:22
virtual void CommandProc(MmlSeqTrack *track, u32 command, s32 commandArg1, s32 commandArg2) const
s32 ReadVar(const u8 **data) const
ParseResult Parse(MmlSeqTrack *track, bool doNoteOn) const
u16 Read16(const u8 **data) const
vs16 * GetVariablePtr(SeqPlayer *player, SeqTrack *track, int varNo) const
MmlSeqData
Definition MmlParser.h:41
@ MML_EOF
Definition MmlParser.h:98
@ MML_EX_AER
Definition MmlParser.h:119
@ MML_SET_PRGNO
Definition MmlParser.h:45
@ MML_EX_NE
Definition MmlParser.h:130
@ MML_SET_PORTAMENTO
Definition MmlParser.h:65
@ MML_CALL
Definition MmlParser.h:48
@ MML_SET_TEMPO
Definition MmlParser.h:91
@ MML_SET_DAMPER
Definition MmlParser.h:88
@ MML_EX_COMMAND
Definition MmlParser.h:106
@ MML_SET_TRACK_VOLUME
Definition MmlParser.h:57
@ MML_SET_BENDRANGE
Definition MmlParser.h:61
@ MML_SET_ATTACK
Definition MmlParser.h:73
@ MML_SET_FXSEND_A
Definition MmlParser.h:82
@ MML_SET_TIE
Definition MmlParser.h:64
@ MML_ALLOCTRACK
Definition MmlParser.h:97
@ MML_EX_AOR
Definition MmlParser.h:118
@ MML_SET_PLAYER_VOLUME
Definition MmlParser.h:58
@ MML_CMD_MAX
Definition MmlParser.h:103
@ MML_PRINTVAR
Definition MmlParser.h:79
@ MML_SET_MAINSEND
Definition MmlParser.h:84
@ MML_SET_DECAY
Definition MmlParser.h:74
@ MML_CMD_MIN
Definition MmlParser.h:42
@ MML_EX_APL
Definition MmlParser.h:111
@ MML_SET_SWEEPPITCH
Definition MmlParser.h:93
@ MML_CMD_E2h
Definition MmlParser.h:92
@ MML_EX_AMD
Definition MmlParser.h:121
@ MML_EX_AAD
Definition MmlParser.h:117
@ MML_CMD_SET_MASK
Definition MmlParser.h:101
@ MML_SET_LFORANGE
Definition MmlParser.h:69
@ MML_SET_LFODEPTH
Definition MmlParser.h:66
@ MML_EX_SET
Definition MmlParser.h:110
@ MML_CMD_MASK
Definition MmlParser.h:100
@ MML_SET_TIMEBASE
Definition MmlParser.h:54
@ MML_SET_TRANSPOSE
Definition MmlParser.h:59
@ MML_SET_LFOTARGET
Definition MmlParser.h:68
@ MML_RET
Definition MmlParser.h:96
@ MML_EX_ADV
Definition MmlParser.h:114
@ MML_EX_LOGIC
Definition MmlParser.h:124
@ MML_SET_MUTE
Definition MmlParser.h:86
@ MML_EX_ACO
Definition MmlParser.h:120
@ MML_RNDPARAM
Definition MmlParser.h:50
@ MML_SET_LFODELAY
Definition MmlParser.h:90
@ MML_SET_SUSTAIN
Definition MmlParser.h:75
@ MML_EX_EQ
Definition MmlParser.h:125
@ MML_SET_INITPAN
Definition MmlParser.h:85
@ MML_EX_LT
Definition MmlParser.h:129
@ MML_SET_PORTASPEED
Definition MmlParser.h:70
@ MML_SET_LPFFREQ
Definition MmlParser.h:81
@ MML_EX_GE
Definition MmlParser.h:126
@ MML_OPENTRACK
Definition MmlParser.h:46
@ MML_LOOP_START
Definition MmlParser.h:77
@ MML_WAIT
Definition MmlParser.h:44
@ MML_SET_PRIORITY
Definition MmlParser.h:62
@ MML_SET_TRACK_VOLUME2
Definition MmlParser.h:78
@ MML_SET_LFOSPEED
Definition MmlParser.h:67
@ MML_EX_GT
Definition MmlParser.h:127
@ MML_SET_SURROUNDPAN
Definition MmlParser.h:80
@ MML_EX_AMI
Definition MmlParser.h:112
@ MML_EX_AMU
Definition MmlParser.h:113
@ MML_EX_CMD_MAX
Definition MmlParser.h:135
@ MML_SET_PAN
Definition MmlParser.h:56
@ MML_SET_NOTEWAIT
Definition MmlParser.h:63
@ MML_EX_ALS
Definition MmlParser.h:115
@ MML_EXECIF
Definition MmlParser.h:52
@ MML_SET_PITCHBEND
Definition MmlParser.h:60
@ MML_EX_RND
Definition MmlParser.h:116
@ MML_JUMP
Definition MmlParser.h:47
@ MML_SET_FXSEND_C
Definition MmlParser.h:87
@ MML_LOOP_END
Definition MmlParser.h:95
@ MML_EX_USERPROC
Definition MmlParser.h:133
@ MML_SET_FXSEND_B
Definition MmlParser.h:83
@ MML_INDPARAM
Definition MmlParser.h:51
@ MML_EX_LE
Definition MmlParser.h:128
@ MML_SET_RELEASE
Definition MmlParser.h:76
@ MML_SET_PORTATIME
Definition MmlParser.h:71
@ MML_EX_ARITHMETIC
Definition MmlParser.h:109
u8 ReadByte(const u8 **data) const
Definition MmlParser.h:139
s32 ReadArg(const u8 **data, SeqPlayer *player, SeqTrack *track, SeqArgType type) const
virtual Channel * NoteOnCommandProc(MmlSeqTrack *track, int key, int velocity, s32 length, bool tieFlag) const
static void EnablePrintVar(bool enable)
Definition MmlParser.h:38
static bool mPrintVarEnabledFlag
Definition MmlParser.h:148
static const int CALL_STACK_MAX_DEPTH
Definition MmlParser.h:25
Definition MmlSeqTrack.h:10
Definition SeqPlayer.h:27
Definition SeqTrack.h:20
unsigned long u32
Definition types.h:12
volatile s16 vs16
Definition types.h:21
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
ParseResult
Definition SeqTrack.h:16
Definition HBMAnmController.h:6