2 midi-item.hh -- declare Midi items
4 (c) 1997--1998 Jan Nieuwenhuizen <jan@digicash.com>
11 #include "lily-proto.hh"
14 #include "virtual-methods.hh"
18 Any piece of midi information.
20 Maybe use base classes for RIFF files?
23 DECLARE_MY_RUNTIME_TYPEINFO;
24 Midi_item (Audio_item* audio_item_l);
25 virtual ~Midi_item ();
26 static String i2varint_str (int i);
27 virtual String str () const = 0;
29 Audio_item* audio_item_l_;
33 Midi_item (Midi_item const&);
34 Midi_item& operator = ( Midi_item const&);
42 Midi_event (Moment delta_mom, Midi_item* mitem_l);
50 variable sized MIDI data
52 struct Midi_chunk : Midi_item {
53 DECLARE_MY_RUNTIME_TYPEINFO;
56 void set (String header_str, String data_str, String footer_str);
57 virtual String str () const;
58 virtual String data_str () const;
66 struct Midi_duration : public Midi_item {
67 DECLARE_MY_RUNTIME_TYPEINFO;
68 Midi_duration (Real seconds_f);
70 virtual String str () const;
74 struct Midi_header : Midi_chunk {
75 DECLARE_MY_RUNTIME_TYPEINFO;
77 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
81 Change instrument event
83 struct Midi_instrument : public Midi_item {
84 DECLARE_MY_RUNTIME_TYPEINFO;
85 Midi_instrument (int channel_i, String instrument_str);
87 virtual String str () const;
88 String instrument_str_;
92 struct Midi_key : public Midi_item {
93 DECLARE_MY_RUNTIME_TYPEINFO;
94 Midi_key (Audio_item* audio_item_l);
96 virtual String str () const;
99 struct Midi_meter : Midi_item {
101 DECLARE_MY_RUNTIME_TYPEINFO;
102 Midi_meter (Audio_item* audio_item_l);
104 virtual String str () const;
109 Turn a note on (blond).
111 struct Midi_note : public Midi_item {
112 DECLARE_MY_RUNTIME_TYPEINFO;
113 Midi_note (Audio_item* audio_item_l);
115 Moment duration () const;
116 int pitch_i () const;
117 virtual String str () const;
119 int const c0_pitch_i_c_ = 60;
124 Turn a note off (dark).
126 struct Midi_note_off : public Midi_item {
127 DECLARE_MY_RUNTIME_TYPEINFO;
128 Midi_note_off (Midi_note*);
130 int pitch_i () const;
131 virtual String str () const;
133 Byte aftertouch_byte_;
136 struct Midi_text : Midi_item {
137 DECLARE_MY_RUNTIME_TYPEINFO;
140 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
143 Midi_text (Midi_text::Type type, String text_str);
144 Midi_text (Audio_item* audio_item_l);
146 virtual String str () const;
152 struct Midi_tempo : Midi_item {
153 DECLARE_MY_RUNTIME_TYPEINFO;
154 Midi_tempo (int per_minute_4_i);
155 Midi_tempo (Audio_item* audio_item_l);
157 virtual String str () const;
162 struct Midi_track : Midi_chunk {
163 DECLARE_MY_RUNTIME_TYPEINFO;
165 Pointer_list<Midi_event*> event_p_list_;
170 void add (Moment delta_time_mom, Midi_item* mitem_l);
171 virtual String data_str () const;
175 Midi_track (Midi_track const&);
178 #endif // MIDI_ITEM_HH