2 midi-item.hh -- declare Midi items
4 (c) 1997--2007 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);
48 Midi_event (int delta, Midi_item *midi);
52 string to_string () const;
56 variable sized MIDI data
58 class Midi_chunk : public Midi_item
61 void set (string header_string, string data_string, string footer_string);
62 virtual string to_string () const;
63 virtual string data_string () const;
64 DECLARE_CLASSNAME(Midi_chunk);
68 string footer_string_;
69 string header_string_;
72 class Midi_duration : public Midi_item
75 Midi_duration (Real seconds_f);
77 virtual string to_string () const;
81 class Midi_header : public Midi_chunk
84 DECLARE_CLASSNAME(Midi_header);
86 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
90 Change instrument event
92 class Midi_instrument : public Midi_channel_item
95 Midi_instrument (Audio_instrument *);
97 DECLARE_CLASSNAME(Midi_instrument);
98 virtual string to_string () const;
100 Audio_instrument *audio_;
103 class Midi_key : public Midi_item
106 Midi_key (Audio_key *);
107 DECLARE_CLASSNAME(Midi_key);
109 virtual string to_string () const;
114 class Midi_time_signature : public Midi_item
117 Midi_time_signature (Audio_time_signature *);
118 DECLARE_CLASSNAME(Midi_time_signature);
120 virtual string to_string () const;
122 Audio_time_signature *audio_;
126 class Midi_note : public Midi_channel_item
129 Midi_note (Audio_note *);
130 DECLARE_CLASSNAME(Midi_note);
132 int get_semitone_pitch () const;
133 int get_fine_tuning () const;
134 virtual string to_string () const;
139 static int const c0_pitch_ = 60;
143 class Midi_note_off : public Midi_note
146 Midi_note_off (Midi_note *);
147 DECLARE_CLASSNAME(Midi_note_off);
149 virtual string to_string () const;
152 Byte aftertouch_byte_;
155 class Midi_text : public Midi_item
160 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
163 DECLARE_CLASSNAME(Midi_text);
165 Midi_text (Audio_text *);
167 virtual string to_string () const;
172 class Midi_dynamic : public Midi_channel_item
175 Midi_dynamic (Audio_dynamic *);
176 DECLARE_CLASSNAME(Midi_dynamic);
178 virtual string to_string () const;
180 Audio_dynamic *audio_;
183 class Midi_piano_pedal : public Midi_channel_item
186 Midi_piano_pedal (Audio_piano_pedal *);
187 DECLARE_CLASSNAME(Midi_piano_pedal);
189 virtual string to_string () const;
191 Audio_piano_pedal *audio_;
194 class Midi_tempo : public Midi_item
197 Midi_tempo (Audio_tempo *);
198 DECLARE_CLASSNAME(Midi_tempo);
200 virtual string to_string () const;
205 class Midi_track : public Midi_chunk
209 DECLARE_CLASSNAME(Midi_track);
211 vector<Midi_event*> events_;
216 void add (int, Midi_item *midi);
217 virtual string data_string () const;
220 #endif // MIDI_ITEM_HH