2 // midiitem.hh -- part of GNU LilyPond
4 // copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
10 #include "lily-proto.hh"
11 #include "virtual-methods.hh"
14 Any piece of midi information.
16 Maybe use base classes for RIFF files?
20 DECLARE_MY_RUNTIME_TYPEINFO;
21 static String i2varint_str( int i );
22 virtual void output_midi( Midi_stream& midi_stream_r ) const;
23 virtual String str() const = 0;
25 Midi_item(Midi_item const&){}
26 void operator=(Midi_item const&){}
29 struct Midi_key : public Midi_item {
30 Midi_key( int accidentals_i, int minor_i );
31 DECLARE_MY_RUNTIME_TYPEINFO;
33 virtual String str() const;
40 Change instrument event
42 struct Midi_instrument : public Midi_item {
43 Midi_instrument( int channel_i, String instrument_str );
44 DECLARE_MY_RUNTIME_TYPEINFO;
46 virtual String str() const;
52 struct Midi_note : public Midi_item {
54 Generate a note-event on a channel.
56 @param #melreq_l# is the pitch.
58 Midi_note( Melodic_req* melreq_l, int channel_i, bool on_b );
59 DECLARE_MY_RUNTIME_TYPEINFO;
61 virtual String str() const;
64 int const c0_pitch_i_c_ = 60;
72 struct Midi_duration : public Midi_item {
73 Midi_duration( Real seconds_f );
74 DECLARE_MY_RUNTIME_TYPEINFO;
76 virtual String str() const;
81 struct Midi_chunk : Midi_item {
83 DECLARE_MY_RUNTIME_TYPEINFO;
85 void add( String str );
86 void set( String header_str, String data_str, String footer_str );
87 virtual String str() const;
94 struct Midi_header : Midi_chunk {
96 Midi_header( int format_i, int tracks_i, int clocks_per_4_i );
97 DECLARE_MY_RUNTIME_TYPEINFO;
100 struct Midi_text : Midi_item {
103 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
106 Midi_text( Midi_text::Type type, String text_str );
107 DECLARE_MY_RUNTIME_TYPEINFO;
109 virtual String str() const;
110 /* *************** */
116 struct Midi_tempo : Midi_item {
117 Midi_tempo( int per_minute_4_i );
118 DECLARE_MY_RUNTIME_TYPEINFO;
120 virtual String str() const;
121 /* *************** */
126 struct Midi_time : Midi_item {
128 Midi_time( int num_i, int den_i, int clocks_per_1_i );
129 DECLARE_MY_RUNTIME_TYPEINFO;
131 virtual String str() const;
133 /* *************** */
139 struct Midi_track : Midi_chunk {
141 /* *************** */
143 DECLARE_MY_RUNTIME_TYPEINFO;
145 void add( int delta_time_i, String event );
146 void add( Moment delta_time_moment, Midi_item* mitem_l );
149 #endif // MIDI_ITEM_HH //