]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
*** empty log message ***
[lilypond.git] / lily / include / midi-item.hh
1 /*
2   midi-item.hh -- declare Midi items
3
4   (c) 1997--2005 Jan Nieuwenhuizen <janneke@gnu.org>
5  */
6
7 #ifndef MIDI_ITEM_HH
8 #define MIDI_ITEM_HH
9
10 #include "cons.hh"
11 #include "audio-item.hh"
12
13 /**
14   Any piece of midi information.
15
16   Maybe use base classes for RIFF files?
17  */
18 class Midi_item
19 {
20 public:
21   Midi_item ();
22   virtual ~Midi_item ();
23
24   /// factory
25   static Midi_item* get_midi (Audio_item* a);
26
27   static String i2varint_string (int i);
28
29   virtual String to_string () const = 0;
30
31   int channel_;
32 };
33
34 /**
35   timed MIDI event
36  */
37 class Midi_event
38 {
39 public:
40   Midi_event (Moment delta_mom, Midi_item* midi);
41
42   Moment delta_mom_;
43   Midi_item* midi_;
44   String to_string () const;
45 };
46
47 /**
48   variable sized MIDI data
49  */
50 class Midi_chunk : public Midi_item
51 {
52 public:
53   void set (String header_string, String data_string, String footer_string);
54   virtual String to_string () const;
55   virtual String data_string () const;
56
57 private:
58   String data_string_;
59   String footer_string_;
60   String header_string_;
61 };
62
63 class Midi_duration : public Midi_item
64 {
65 public:
66   Midi_duration (Real seconds_f);
67
68   virtual String to_string () const;
69   Real seconds_;
70 };
71
72 class Midi_header : public Midi_chunk
73 {
74 public:
75   Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
76 };
77
78 /**
79   Change instrument event
80  */
81 class Midi_instrument : public Midi_item
82 {
83 public:
84   Midi_instrument (Audio_instrument*);
85
86   virtual String to_string () const;
87
88   Audio_instrument* audio_;
89 };
90                                       
91
92 class Midi_key : public Midi_item
93 {
94 public:
95   Midi_key (Audio_key*);
96         
97   virtual String to_string () const;
98
99   Audio_key* audio_;
100 };
101
102 class Midi_time_signature : public Midi_item
103 {
104 public:
105   Midi_time_signature (Audio_time_signature*);
106   
107   virtual String to_string () const;
108
109   Audio_time_signature* audio_;
110   int clocks_per_1_;
111 };
112
113 /**
114   Turn a note on.
115  */
116 class Midi_note : public Midi_item
117 {
118 public:
119   Midi_note (Audio_note*);
120
121   Moment get_length () const;
122   int get_pitch () const;
123   int get_fine_tuning () const;
124   virtual String to_string () const;
125
126   Audio_note* audio_;
127
128   static int const c0_pitch_i_ = 60;
129   Byte dynamic_byte_;
130 };
131
132 /**
133   Turn a note off 
134  */
135 class Midi_note_off : public Midi_note
136 {
137 public:
138   Midi_note_off (Midi_note*); 
139
140   virtual String to_string () const;
141
142   Midi_note* on_;
143   Byte aftertouch_byte_;
144 };
145
146 class Midi_text : public Midi_item
147 {
148 public:
149   enum Type { 
150     TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, 
151     MARKER, CUE_POINT
152   };
153
154   Midi_text (Audio_text*);
155     
156   virtual String to_string () const;
157
158   Audio_text* audio_;
159 };
160
161 class Midi_dynamic : public Midi_item
162 {
163 public:
164   Midi_dynamic (Audio_dynamic*);
165   
166   virtual String to_string () const;
167
168   Audio_dynamic* audio_;
169 };
170
171 class Midi_piano_pedal : public Midi_item
172 {
173 public:
174   Midi_piano_pedal (Audio_piano_pedal*);
175   
176   virtual String to_string () const;
177
178   Audio_piano_pedal* audio_;
179 };
180
181 class Midi_tempo : public Midi_item
182 {
183 public:
184   Midi_tempo (Audio_tempo*);
185   
186   virtual String to_string () const;
187
188   Audio_tempo* audio_;
189 };
190
191 class Midi_track : public Midi_chunk
192 {
193 public:
194   int number_;
195
196   /*
197     Compensate for starting grace notes.
198    */
199   Cons_list<Midi_event> event_p_list_;
200   
201   Midi_track ();
202
203   void add (Moment delta_time_mom, Midi_item* midi);
204   virtual String data_string () const;
205 };
206
207 #endif // MIDI_ITEM_HH