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 virtual ~Midi_item ();
24 static String i2varint_str (int i);
25 void output (Midi_stream* midi_stream_l) const;
26 virtual String str() const = 0;
28 Audio_item* audio_item_l_;
32 Midi_item (Midi_item const&);
33 Midi_item& operator =( Midi_item const&);
37 variable sized MIDI data
39 struct Midi_chunk : Midi_item {
40 DECLARE_MY_RUNTIME_TYPEINFO;
43 void add (String str);
44 void set (String header_str, String data_str, String footer_str);
45 virtual String str() const;
53 struct Midi_duration : public Midi_item {
54 DECLARE_MY_RUNTIME_TYPEINFO;
55 Midi_duration (Real seconds_f);
57 virtual String str() const;
61 struct Midi_header : Midi_chunk {
62 DECLARE_MY_RUNTIME_TYPEINFO;
64 Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
69 Change instrument event
71 struct Midi_instrument : public Midi_item {
72 DECLARE_MY_RUNTIME_TYPEINFO;
73 Midi_instrument (int channel_i, String instrument_str);
75 virtual String str() const;
76 String instrument_str_;
80 struct Midi_key : public Midi_item {
81 DECLARE_MY_RUNTIME_TYPEINFO;
82 Midi_key (Audio_item* audio_item_l);
84 virtual String str() const;
87 struct Midi_meter : Midi_item {
89 DECLARE_MY_RUNTIME_TYPEINFO;
90 Midi_meter (Audio_item* audio_item_l);
92 virtual String str() const;
97 Turn a note on (blond).
99 struct Midi_note : public Midi_item {
100 DECLARE_MY_RUNTIME_TYPEINFO;
101 Midi_note (Audio_item* audio_item_l);
103 Moment duration() const;
105 virtual String str() const;
107 int const c0_pitch_i_c_ = 60;
112 Turn a note off (dark).
114 struct Midi_note_off : public Midi_item {
115 DECLARE_MY_RUNTIME_TYPEINFO;
116 Midi_note_off (Midi_note* midi_note_l);
119 virtual String str() const;
121 Byte aftertouch_byte_;
124 struct Midi_text : Midi_item {
125 DECLARE_MY_RUNTIME_TYPEINFO;
128 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
131 Midi_text (Midi_text::Type type, String text_str);
132 Midi_text (Audio_item* audio_item_l);
134 virtual String str() const;
140 struct Midi_tempo : Midi_item {
141 DECLARE_MY_RUNTIME_TYPEINFO;
142 Midi_tempo (int per_minute_4_i);
143 Midi_tempo (Audio_item* audio_item_l);
145 virtual String str() const;
150 struct Midi_track : Midi_chunk {
151 DECLARE_MY_RUNTIME_TYPEINFO;
156 void add (int delta_time_i, String event);
157 void add (Moment delta_time_moment, Midi_item* mitem_l);
160 #endif // MIDI_ITEM_HH