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;
42 Midi_event (Moment delta_mom, Midi_item *midi);
46 string to_string () const;
50 variable sized MIDI data
52 class Midi_chunk : public Midi_item
55 void set (string header_string, string data_string, string footer_string);
56 virtual string to_string () const;
57 virtual string data_string () const;
58 DECLARE_CLASSNAME(Midi_chunk);
62 string footer_string_;
63 string header_string_;
66 class Midi_duration : public Midi_item
69 Midi_duration (Real seconds_f);
71 virtual string to_string () const;
75 class Midi_header : public Midi_chunk
78 DECLARE_CLASSNAME(Midi_header);
80 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
84 Change instrument event
86 class Midi_instrument : public Midi_item
89 Midi_instrument (Audio_instrument *);
91 DECLARE_CLASSNAME(Midi_instrument);
92 virtual string to_string () const;
94 Audio_instrument *audio_;
97 class Midi_key : public Midi_item
100 Midi_key (Audio_key *);
101 DECLARE_CLASSNAME(Midi_key);
103 virtual string to_string () const;
108 class Midi_time_signature : public Midi_item
111 Midi_time_signature (Audio_time_signature *);
112 DECLARE_CLASSNAME(Midi_time_signature);
114 virtual string to_string () const;
116 Audio_time_signature *audio_;
123 class Midi_note : public Midi_item
126 Midi_note (Audio_note *);
127 DECLARE_CLASSNAME(Midi_note);
129 Moment get_length () const;
130 int get_pitch () const;
131 int get_fine_tuning () const;
132 virtual string to_string () const;
136 static int const c0_pitch_i_ = 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_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_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);
212 Compensate for starting grace notes.
214 vector<Midi_event*> events_;
219 void add (Moment delta_time_mom, Midi_item *midi);
220 virtual string data_string () const;
223 #endif // MIDI_ITEM_HH