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