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