]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
* lily/midi-item.cc (name): new method.
[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   virtual char const *name () const;
24
25   /// factory
26   static Midi_item *get_midi (Audio_item *a);
27
28   static String i2varint_string (int i);
29
30   virtual String to_string () const = 0;
31
32   int channel_;
33 };
34
35 /**
36    timed MIDI event
37 */
38 class Midi_event
39 {
40 public:
41   Midi_event (Moment delta_mom, Midi_item *midi);
42
43   Moment delta_mom_;
44   Midi_item *midi_;
45   String to_string () const;
46 };
47
48 /**
49    variable sized MIDI data
50 */
51 class Midi_chunk : public Midi_item
52 {
53 public:
54   void set (String header_string, String data_string, String footer_string);
55   virtual String to_string () const;
56   virtual String data_string () const;
57
58 private:
59   String data_string_;
60   String footer_string_;
61   String header_string_;
62 };
63
64 class Midi_duration : public Midi_item
65 {
66 public:
67   Midi_duration (Real seconds_f);
68
69   virtual String to_string () const;
70   Real seconds_;
71 };
72
73 class Midi_header : public Midi_chunk
74 {
75 public:
76   Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
77 };
78
79 /**
80    Change instrument event
81 */
82 class Midi_instrument : public Midi_item
83 {
84 public:
85   Midi_instrument (Audio_instrument *);
86
87   virtual String to_string () const;
88
89   Audio_instrument *audio_;
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     {
151       TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
152       MARKER, CUE_POINT
153     };
154
155   Midi_text (Audio_text *);
156
157   virtual String to_string () const;
158
159   Audio_text *audio_;
160 };
161
162 class Midi_dynamic : public Midi_item
163 {
164 public:
165   Midi_dynamic (Audio_dynamic *);
166
167   virtual String to_string () const;
168
169   Audio_dynamic *audio_;
170 };
171
172 class Midi_piano_pedal : public Midi_item
173 {
174 public:
175   Midi_piano_pedal (Audio_piano_pedal *);
176
177   virtual String to_string () const;
178
179   Audio_piano_pedal *audio_;
180 };
181
182 class Midi_tempo : public Midi_item
183 {
184 public:
185   Midi_tempo (Audio_tempo *);
186
187   virtual String to_string () const;
188
189   Audio_tempo *audio_;
190 };
191
192 class Midi_track : public Midi_chunk
193 {
194 public:
195   int number_;
196
197   /*
198     Compensate for starting grace notes.
199   */
200   Cons_list<Midi_event> event_p_list_;
201
202   Midi_track ();
203
204   void add (Moment delta_time_mom, Midi_item *midi);
205   virtual String data_string () const;
206 };
207
208 #endif // MIDI_ITEM_HH