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;
26 static Midi_item *get_midi (Audio_item *a);
28 static string i2varint_string (int i);
30 virtual string to_string () const = 0;
33 class Midi_channel_item : public Midi_item
37 DECLARE_CLASSNAME(Midi_channel_item);
47 Midi_event (int delta, Midi_item *midi);
51 string to_string () const;
55 variable sized MIDI data
57 class Midi_chunk : public Midi_item
60 void set (string header_string, string data_string, string footer_string);
61 virtual string to_string () const;
62 virtual string data_string () const;
63 DECLARE_CLASSNAME(Midi_chunk);
67 string footer_string_;
68 string header_string_;
71 class Midi_duration : public Midi_item
74 Midi_duration (Real seconds_f);
76 virtual string to_string () const;
80 class Midi_header : public Midi_chunk
83 DECLARE_CLASSNAME(Midi_header);
85 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
89 Change instrument event
91 class Midi_instrument : public Midi_channel_item
94 Midi_instrument (Audio_instrument *);
96 DECLARE_CLASSNAME(Midi_instrument);
97 virtual string to_string () const;
99 Audio_instrument *audio_;
102 class Midi_key : public Midi_item
105 Midi_key (Audio_key *);
106 DECLARE_CLASSNAME(Midi_key);
108 virtual string to_string () const;
113 class Midi_time_signature : public Midi_item
116 Midi_time_signature (Audio_time_signature *);
117 DECLARE_CLASSNAME(Midi_time_signature);
119 virtual string to_string () const;
121 Audio_time_signature *audio_;
125 class Midi_note : public Midi_channel_item
128 Midi_note (Audio_note *);
129 DECLARE_CLASSNAME(Midi_note);
131 int get_semitone_pitch () const;
132 int get_fine_tuning () const;
133 virtual string to_string () const;
138 static int const c0_pitch_ = 60;
142 class Midi_note_off : public Midi_note
145 Midi_note_off (Midi_note *);
146 DECLARE_CLASSNAME(Midi_note_off);
148 virtual string to_string () const;
151 Byte aftertouch_byte_;
154 class Midi_text : public Midi_item
159 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
162 DECLARE_CLASSNAME(Midi_text);
164 Midi_text (Audio_text *);
166 virtual string to_string () const;
171 class Midi_dynamic : public Midi_channel_item
174 Midi_dynamic (Audio_dynamic *);
175 DECLARE_CLASSNAME(Midi_dynamic);
177 virtual string to_string () const;
179 Audio_dynamic *audio_;
182 class Midi_piano_pedal : public Midi_channel_item
185 Midi_piano_pedal (Audio_piano_pedal *);
186 DECLARE_CLASSNAME(Midi_piano_pedal);
188 virtual string to_string () const;
190 Audio_piano_pedal *audio_;
193 class Midi_tempo : public Midi_item
196 Midi_tempo (Audio_tempo *);
197 DECLARE_CLASSNAME(Midi_tempo);
199 virtual string to_string () const;
204 class Midi_track : public Midi_chunk
208 DECLARE_CLASSNAME(Midi_track);
210 vector<Midi_event*> events_;
215 void add (int, Midi_item *midi);
216 virtual string data_string () const;
219 #endif // MIDI_ITEM_HH