5 #include "proto.hh" // ugh, these all for midi-main.hh
8 #include "sourcefile.hh"
10 #include "midi-main.hh" // *tors
12 #include "my-midi-lexer.hh"
13 #include "my-midi-parser.hh"
15 #include "midi-event.hh"
16 #include "midi-track.hh"
17 #include "midi-score.hh"
31 Midi_event* midi_event_p; // Voice_element* ?
32 Midi_score* midi_score_p; // Input_score* ?
33 Midi_track* midi_track_p; // Input_music* ?
37 %token SYSEX_EVENT1 SYSEX_EVENT2
39 %token SEQUENCE TEXT COPYRIGHT TRACK_NAME INSTRUMENT_NAME LYRIC MARKER CUE_POINT
40 %token END_OF_TRACK TEMPO SMPTE_OFFSET TIME KEY SSME
42 %token<i> INT8 INT16 INT32 INT7_8UNSET INT7_8SET VARINT
43 %token<i> RUNNING_STATUS DATA_ENTRY ALL_NOTES_OFF
44 %token<i> NOTE_OFF NOTE_ON
45 %token<i> POLYPHONIC_AFTERTOUCH CONTROLMODE_CHANGE PROGRAM_CHANGE
46 %token<i> CHANNEL_AFTERTOUCH PITCHWHEEL_RANGE
50 %type <midi_score_p> header midi_score
51 %type <midi_track_p> track
52 %type <midi_event_p> event
53 %type <midi_event_p> the_event meta_event the_meta_event text_event midi_event sysex_event
54 %type <midi_event_p> running_status data_entry all_notes_off
55 %type <midi_event_p> note_off note_on
56 %type <midi_event_p> polyphonic_aftertouch controlmode_change program_change
57 %type <midi_event_p> channel_aftertouch pitchwheel_range
63 midi_parser_l_g->add_score( $2 );
76 HEADER INT32 INT16 INT16 INT16 {
77 $$ = new Midi_score( $3, $4, $5 );
78 midi_parser_l_g->set_division( $5 );
93 if ( $2 && $2->mudela_str().length_i() ) {
94 if ( ( $2->mudela_str()[ 0 ] >= 'a' )
95 && $2->mudela_str()[ 0 ] <= 'g' )
96 qtor << $2->mudela_str() << " ";
98 vtor << $2->mudela_str() << " ";
105 midi_parser_l_g->forward( $1 );
119 META_EVENT the_meta_event {
123 META_EVENT INT8 INT8 INT8 {
139 | TEMPO INT8 INT8 INT8 {
140 $$ = new Midi_tempo( ( $2 << 16 ) + ( $3 << 8 ) + $4 );
141 vtor << $$->mudela_str() << endl; // ?? waai not at event:
142 midi_parser_l_g->set_tempo( ( $2 << 16 ) + ( $3 << 8 ) + $4 );
144 | SMPTE_OFFSET INT8 INT8 INT8 INT8 INT8 {
147 | TIME INT8 INT8 INT8 INT8 {
148 $$ = new Midi_time( $2, $3, $4, $5 );
149 vtor << $$->mudela_str() << endl; // ?? waai not at event:
150 midi_parser_l_g->set_time( $2, $3, $4, $5 );
153 $$ = new Midi_key( $2, $3 );
154 midi_parser_l_g->set_key( $2, $3 );
164 vtor << endl << "Text: ";
167 vtor << endl << "Copyright: ";
170 vtor << endl << "Track name: ";
173 vtor << endl << "Instrument name: ";
176 vtor << endl << "Lyric: ";
179 vtor << endl << "Marker: ";
182 vtor << endl << "Cue point: ";
197 | polyphonic_aftertouch {
199 | controlmode_change {
203 | channel_aftertouch {
210 RUNNING_STATUS INT8 { //INT8 {
222 ALL_NOTES_OFF INT8 INT8 {
231 $$ = midi_parser_l_g->note_end_midi_event_p( $1 & ~0x80, $2, $3 );
240 midi_parser_l_g->note_begin( $1 & ~0x90, $2, $3 );
244 polyphonic_aftertouch:
245 POLYPHONIC_AFTERTOUCH INT8 INT8 {
251 CONTROLMODE_CHANGE INT8 INT8 {
257 PROGRAM_CHANGE INT8 {
263 CHANNEL_AFTERTOUCH INT8 INT8 {
269 PITCHWHEEL_RANGE INT8 INT8 {
278 | SYSEX_EVENT2 DATA { // INT8 ?