2 midi-item.hh -- declare Midi items
4 (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
11 #include "audio-item.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 std::string i2varint_string (int i);
31 virtual std::string to_string () const = 0;
42 Midi_event (Moment delta_mom, Midi_item *midi);
46 std::string to_string () const;
50 variable sized MIDI data
52 class Midi_chunk : public Midi_item
55 void set (std::string header_string, std::string data_string, std::string footer_string);
56 virtual std::string to_string () const;
57 virtual std::string data_string () const;
58 DECLARE_CLASSNAME(Midi_chunk);
61 std::string data_string_;
62 std::string footer_string_;
63 std::string header_string_;
66 class Midi_duration : public Midi_item
69 Midi_duration (Real seconds_f);
71 virtual std::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 std::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 std::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 std::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 std::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 std::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 std::string to_string () const;
172 class Midi_dynamic : public Midi_item
175 Midi_dynamic (Audio_dynamic *);
176 DECLARE_CLASSNAME(Midi_dynamic);
178 virtual std::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 std::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 std::string to_string () const;
205 class Midi_track : public Midi_chunk
209 DECLARE_CLASSNAME(Midi_track);
212 Compensate for starting grace notes.
214 Cons_list<Midi_event> event_p_list_;
218 void add (Moment delta_time_mom, Midi_item *midi);
219 virtual std::string data_string () const;
222 #endif // MIDI_ITEM_HH