]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
Run `make grand-replace'.
[lilypond.git] / lily / include / midi-item.hh
1 /*
2   midi-item.hh -- declare Midi items
3
4   (c) 1997--2008 Jan Nieuwenhuizen <janneke@gnu.org>
5 */
6
7 #ifndef MIDI_ITEM_HH
8 #define MIDI_ITEM_HH
9
10 #include "audio-item.hh"
11 #include "std-vector.hh"
12
13 string int2midi_varint_string (int i);
14   
15 /**
16    Any piece of midi information.
17
18    Maybe use base classes for RIFF files?
19 */
20 class Midi_item
21 {
22 public:
23   DECLARE_CLASSNAME(Midi_item);
24   Midi_item ();
25   virtual ~Midi_item ();
26   virtual char const *name () const;
27
28   static Midi_item *get_midi (Audio_item *a);
29
30
31   virtual string to_string () const = 0;
32 };
33
34 class Midi_channel_item : public Midi_item
35 {
36 public:
37   int channel_;
38   DECLARE_CLASSNAME(Midi_channel_item);
39   Midi_channel_item ();
40 };
41
42 class Midi_duration : public Midi_item
43 {
44 public:
45   Midi_duration (Real seconds_f);
46
47   virtual string to_string () const;
48   Real seconds_;
49 };
50
51
52 /**
53    Change instrument event
54 */
55 class Midi_instrument : public Midi_channel_item
56 {
57 public:
58   Midi_instrument (Audio_instrument *);
59
60   DECLARE_CLASSNAME(Midi_instrument);
61   virtual string to_string () const;
62
63   Audio_instrument *audio_;
64 };
65
66 class Midi_key : public Midi_item
67 {
68 public:
69   Midi_key (Audio_key *);
70   DECLARE_CLASSNAME(Midi_key);
71
72   virtual string to_string () const;
73
74   Audio_key *audio_;
75 };
76
77 class Midi_time_signature : public Midi_item
78 {
79 public:
80   Midi_time_signature (Audio_time_signature *);
81   DECLARE_CLASSNAME(Midi_time_signature);
82
83   virtual string to_string () const;
84
85   Audio_time_signature *audio_;
86   int clocks_per_1_;
87 };
88
89 class Midi_note : public Midi_channel_item
90 {
91 public:
92   Midi_note (Audio_note *);
93   DECLARE_CLASSNAME(Midi_note);
94
95   int get_semitone_pitch () const;
96   int get_fine_tuning () const;
97   virtual string to_string () const;
98
99   Audio_note *audio_;
100
101   
102   static int const c0_pitch_ = 60;
103   Byte dynamic_byte_;
104 };
105
106 class Midi_note_off : public Midi_note
107 {
108 public:
109   Midi_note_off (Midi_note *);
110   DECLARE_CLASSNAME(Midi_note_off);
111
112   virtual string to_string () const;
113
114   Midi_note *on_;
115   Byte aftertouch_byte_;
116 };
117
118 class Midi_text : public Midi_item
119 {
120 public:
121   enum Type
122     {
123       TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
124       MARKER, CUE_POINT
125     };
126   DECLARE_CLASSNAME(Midi_text);
127
128   Midi_text (Audio_text *);
129
130   virtual string to_string () const;
131
132   Audio_text *audio_;
133 };
134
135 class Midi_dynamic : public Midi_channel_item
136 {
137 public:
138   Midi_dynamic (Audio_dynamic *);
139   DECLARE_CLASSNAME(Midi_dynamic);
140
141   virtual string to_string () const;
142
143   Audio_dynamic *audio_;
144 };
145
146 class Midi_piano_pedal : public Midi_channel_item
147 {
148 public:
149   Midi_piano_pedal (Audio_piano_pedal *);
150   DECLARE_CLASSNAME(Midi_piano_pedal);
151
152   virtual string to_string () const;
153
154   Audio_piano_pedal *audio_;
155 };
156
157 class Midi_tempo : public Midi_item
158 {
159 public:
160   Midi_tempo (Audio_tempo *);
161   DECLARE_CLASSNAME(Midi_tempo);
162
163   virtual string to_string () const;
164
165   Audio_tempo *audio_;
166 };
167
168
169
170 #endif // MIDI_ITEM_HH