2 midi-item.hh -- declare Midi items
4 (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
11 #include "lily-proto.hh"
12 #include "virtual-methods.hh"
16 Any piece of midi information.
18 Maybe use base classes for RIFF files?
21 DECLARE_MY_RUNTIME_TYPEINFO;
22 Midi_item (Audio_item* audio_item_l);
23 static String i2varint_str (int i);
24 void output (Midi_stream* midi_stream_l) const;
25 virtual String str() const = 0;
27 Audio_item* audio_item_l_;
31 Midi_item (Midi_item const&);
32 Midi_item& operator =( Midi_item const&);
36 variable sized MIDI data
38 struct Midi_chunk : Midi_item {
39 DECLARE_MY_RUNTIME_TYPEINFO;
42 void add (String str);
43 void set (String header_str, String data_str, String footer_str);
44 virtual String str() const;
52 struct Midi_duration : public Midi_item {
53 DECLARE_MY_RUNTIME_TYPEINFO;
54 Midi_duration (Real seconds_f);
56 virtual String str() const;
60 struct Midi_header : Midi_chunk {
61 DECLARE_MY_RUNTIME_TYPEINFO;
63 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
68 Change instrument event
70 struct Midi_instrument : public Midi_item {
71 DECLARE_MY_RUNTIME_TYPEINFO;
72 Midi_instrument (int channel_i, String instrument_str);
74 virtual String str() const;
75 String instrument_str_;
79 struct Midi_key : public Midi_item {
80 DECLARE_MY_RUNTIME_TYPEINFO;
81 Midi_key (Audio_item* audio_item_l);
83 virtual String str() const;
86 struct Midi_meter : Midi_item {
88 DECLARE_MY_RUNTIME_TYPEINFO;
89 Midi_meter (Audio_item* audio_item_l);
91 virtual String str() const;
96 Turn a note on (blond).
98 struct Midi_note : public Midi_item {
99 DECLARE_MY_RUNTIME_TYPEINFO;
100 Midi_note (Audio_item* audio_item_l);
102 Moment duration() const;
104 virtual String str() const;
106 int const c0_pitch_i_c_ = 60;
111 Turn a note off (dark).
113 struct Midi_note_off : public Midi_item {
114 DECLARE_MY_RUNTIME_TYPEINFO;
115 Midi_note_off (Midi_note* midi_note_l);
118 virtual String str() const;
120 Byte aftertouch_byte_;
123 struct Midi_text : Midi_item {
124 DECLARE_MY_RUNTIME_TYPEINFO;
127 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
130 Midi_text (Midi_text::Type type, String text_str);
131 Midi_text (Audio_item* audio_item_l);
133 virtual String str() const;
139 struct Midi_tempo : Midi_item {
140 DECLARE_MY_RUNTIME_TYPEINFO;
141 Midi_tempo (int per_minute_4_i);
142 Midi_tempo (Audio_item* audio_item_l);
144 virtual String str() const;
149 struct Midi_track : Midi_chunk {
150 DECLARE_MY_RUNTIME_TYPEINFO;
155 void add (int delta_time_i, String event);
156 void add (Moment delta_time_moment, Midi_item* mitem_l);
159 #endif // MIDI_ITEM_HH