]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
Run grand-replace (issue 3765)
[lilypond.git] / lily / include / midi-item.hh
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 1997--2014 Jan Nieuwenhuizen <janneke@gnu.org>
5
6   LilyPond is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   LilyPond is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef MIDI_ITEM_HH
21 #define MIDI_ITEM_HH
22
23 #include "audio-item.hh"
24 #include "std-vector.hh"
25
26 string int2midi_varint_string (int i);
27
28 /**
29    Any piece of midi information.
30
31    Maybe use base classes for RIFF files?
32 */
33 class Midi_item
34 {
35 public:
36   DECLARE_CLASSNAME (Midi_item);
37   Midi_item ();
38   virtual ~Midi_item ();
39   virtual char const *name () const;
40
41   static Midi_item *get_midi (Audio_item *a);
42
43   virtual string to_string () const = 0;
44 };
45
46 class Midi_channel_item : public Midi_item
47 {
48 public:
49   virtual ~Midi_channel_item ();
50   int channel_;
51   DECLARE_CLASSNAME (Midi_channel_item);
52   Midi_channel_item (Audio_item *ai);
53 };
54
55 /**
56    Midi control function value changes.
57 */
58 class Midi_control_function_value_change : public Midi_channel_item
59 {
60 public:
61   DECLARE_CLASSNAME (Midi_control_function_value_change);
62   Midi_control_function_value_change (Audio_control_function_value_change *ai);
63   virtual ~Midi_control_function_value_change ();
64   virtual string to_string () const;
65   Audio_control_function_value_change::Control control_;
66   Real value_;
67 };
68
69 class Midi_duration : public Midi_item
70 {
71 public:
72   Midi_duration (Real seconds_f);
73
74   virtual string to_string () const;
75   Real seconds_;
76 };
77
78 /**
79    Change instrument event
80 */
81 class Midi_instrument : public Midi_channel_item
82 {
83 public:
84   Midi_instrument (Audio_instrument *);
85
86   DECLARE_CLASSNAME (Midi_instrument);
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   DECLARE_CLASSNAME (Midi_key);
97
98   virtual string to_string () const;
99
100   Audio_key *audio_;
101 };
102
103 class Midi_time_signature : public Midi_item
104 {
105 public:
106   Midi_time_signature (Audio_time_signature *);
107   DECLARE_CLASSNAME (Midi_time_signature);
108
109   virtual string to_string () const;
110
111   Audio_time_signature *audio_;
112   int clocks_per_1_;
113 };
114
115 class Midi_note : public Midi_channel_item
116 {
117 public:
118   Midi_note (Audio_note *);
119   DECLARE_CLASSNAME (Midi_note);
120
121   int get_semitone_pitch () const;
122   int get_fine_tuning () const;
123   virtual string to_string () const;
124
125   Audio_note *audio_;
126
127   static int const c0_pitch_ = 60;
128   Byte dynamic_byte_;
129 };
130
131 class Midi_note_off : public Midi_note
132 {
133 public:
134   Midi_note_off (Midi_note *);
135   DECLARE_CLASSNAME (Midi_note_off);
136
137   virtual string to_string () const;
138
139   Midi_note *on_;
140   Byte aftertouch_byte_;
141 };
142
143 class Midi_text : public Midi_item
144 {
145 public:
146   enum Type
147   {
148     TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
149     MARKER, CUE_POINT
150   };
151   DECLARE_CLASSNAME (Midi_text);
152
153   Midi_text (Audio_text *);
154
155   virtual string to_string () const;
156
157   Audio_text *audio_;
158 };
159
160 class Midi_dynamic : public Midi_channel_item
161 {
162 public:
163   Midi_dynamic (Audio_dynamic *);
164   DECLARE_CLASSNAME (Midi_dynamic);
165
166   virtual string to_string () const;
167
168   Audio_dynamic *audio_;
169 };
170
171 class Midi_piano_pedal : public Midi_channel_item
172 {
173 public:
174   Midi_piano_pedal (Audio_piano_pedal *);
175   DECLARE_CLASSNAME (Midi_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   DECLARE_CLASSNAME (Midi_tempo);
187
188   virtual string to_string () const;
189
190   Audio_tempo *audio_;
191 };
192
193 #endif // MIDI_ITEM_HH