2 midi-item.hh -- declare Midi items
4 (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
10 #include "audio-item.hh"
11 #include "std-vector.hh"
14 Any piece of midi information.
16 Maybe use base classes for RIFF files?
21 DECLARE_CLASSNAME(Midi_item);
23 virtual ~Midi_item ();
24 virtual char const *name () const;
27 static Midi_item *get_midi (Audio_item *a);
29 static string i2varint_string (int i);
31 virtual string to_string () const = 0;
34 class Midi_channel_item : public Midi_item
38 DECLARE_CLASSNAME(Midi_channel_item);
40 virtual const char *name () const { return "Midi_channel_item"; }
41 virtual ~Midi_channel_item ();
50 Midi_event (Moment delta_mom, Midi_item *midi);
54 string to_string () const;
58 variable sized MIDI data
60 class Midi_chunk : public Midi_item
63 void set (string header_string, string data_string, string footer_string);
64 virtual string to_string () const;
65 virtual string data_string () const;
66 DECLARE_CLASSNAME(Midi_chunk);
70 string footer_string_;
71 string header_string_;
74 class Midi_duration : public Midi_item
77 Midi_duration (Real seconds_f);
79 virtual string to_string () const;
83 class Midi_header : public Midi_chunk
86 DECLARE_CLASSNAME(Midi_header);
88 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
92 Change instrument event
94 class Midi_instrument : public Midi_channel_item
97 Midi_instrument (Audio_instrument *);
99 DECLARE_CLASSNAME(Midi_instrument);
100 virtual string to_string () const;
102 Audio_instrument *audio_;
105 class Midi_key : public Midi_item
108 Midi_key (Audio_key *);
109 DECLARE_CLASSNAME(Midi_key);
111 virtual string to_string () const;
116 class Midi_time_signature : public Midi_item
119 Midi_time_signature (Audio_time_signature *);
120 DECLARE_CLASSNAME(Midi_time_signature);
122 virtual string to_string () const;
124 Audio_time_signature *audio_;
131 class Midi_note : public Midi_channel_item
134 Midi_note (Audio_note *);
135 DECLARE_CLASSNAME(Midi_note);
137 Moment get_length () const;
138 int get_semitone_pitch () const;
139 int get_fine_tuning () const;
140 virtual string to_string () const;
145 static int const c0_pitch_ = 60;
152 class Midi_note_off : public Midi_note
155 Midi_note_off (Midi_note *);
156 DECLARE_CLASSNAME(Midi_note_off);
158 virtual string to_string () const;
161 Byte aftertouch_byte_;
164 class Midi_text : public Midi_item
169 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
172 DECLARE_CLASSNAME(Midi_text);
174 Midi_text (Audio_text *);
176 virtual string to_string () const;
181 class Midi_dynamic : public Midi_channel_item
184 Midi_dynamic (Audio_dynamic *);
185 DECLARE_CLASSNAME(Midi_dynamic);
187 virtual string to_string () const;
189 Audio_dynamic *audio_;
192 class Midi_piano_pedal : public Midi_channel_item
195 Midi_piano_pedal (Audio_piano_pedal *);
196 DECLARE_CLASSNAME(Midi_piano_pedal);
198 virtual string to_string () const;
200 Audio_piano_pedal *audio_;
203 class Midi_tempo : public Midi_item
206 Midi_tempo (Audio_tempo *);
207 DECLARE_CLASSNAME(Midi_tempo);
209 virtual string to_string () const;
214 class Midi_track : public Midi_chunk
218 DECLARE_CLASSNAME(Midi_track);
221 Compensate for starting grace notes.
223 vector<Midi_event*> events_;
228 void add (Moment delta_time_mom, Midi_item *midi);
229 virtual string data_string () const;
232 #endif // MIDI_ITEM_HH