]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
Grand fixcc.py run on all .hh .cc files.
[lilypond.git] / lily / include / midi-item.hh
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 1997--2011 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   int channel_;
50   DECLARE_CLASSNAME (Midi_channel_item);
51   Midi_channel_item (Audio_item *ai);
52 };
53
54 class Midi_duration : public Midi_item
55 {
56 public:
57   Midi_duration (Real seconds_f);
58
59   virtual string to_string () const;
60   Real seconds_;
61 };
62
63 /**
64    Change instrument event
65 */
66 class Midi_instrument : public Midi_channel_item
67 {
68 public:
69   Midi_instrument (Audio_instrument *);
70
71   DECLARE_CLASSNAME (Midi_instrument);
72   virtual string to_string () const;
73
74   Audio_instrument *audio_;
75 };
76
77 class Midi_key : public Midi_item
78 {
79 public:
80   Midi_key (Audio_key *);
81   DECLARE_CLASSNAME (Midi_key);
82
83   virtual string to_string () const;
84
85   Audio_key *audio_;
86 };
87
88 class Midi_time_signature : public Midi_item
89 {
90 public:
91   Midi_time_signature (Audio_time_signature *);
92   DECLARE_CLASSNAME (Midi_time_signature);
93
94   virtual string to_string () const;
95
96   Audio_time_signature *audio_;
97   int clocks_per_1_;
98 };
99
100 class Midi_note : public Midi_channel_item
101 {
102 public:
103   Midi_note (Audio_note *);
104   DECLARE_CLASSNAME (Midi_note);
105
106   int get_semitone_pitch () const;
107   int get_fine_tuning () const;
108   virtual string to_string () const;
109
110   Audio_note *audio_;
111
112   static int const c0_pitch_ = 60;
113   Byte dynamic_byte_;
114 };
115
116 class Midi_note_off : public Midi_note
117 {
118 public:
119   Midi_note_off (Midi_note *);
120   DECLARE_CLASSNAME (Midi_note_off);
121
122   virtual string to_string () const;
123
124   Midi_note *on_;
125   Byte aftertouch_byte_;
126 };
127
128 class Midi_text : public Midi_item
129 {
130 public:
131   enum Type
132   {
133     TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
134     MARKER, CUE_POINT
135   };
136   DECLARE_CLASSNAME (Midi_text);
137
138   Midi_text (Audio_text *);
139
140   virtual string to_string () const;
141
142   Audio_text *audio_;
143 };
144
145 class Midi_dynamic : public Midi_channel_item
146 {
147 public:
148   Midi_dynamic (Audio_dynamic *);
149   DECLARE_CLASSNAME (Midi_dynamic);
150
151   virtual string to_string () const;
152
153   Audio_dynamic *audio_;
154 };
155
156 class Midi_piano_pedal : public Midi_channel_item
157 {
158 public:
159   Midi_piano_pedal (Audio_piano_pedal *);
160   DECLARE_CLASSNAME (Midi_piano_pedal);
161
162   virtual string to_string () const;
163
164   Audio_piano_pedal *audio_;
165 };
166
167 class Midi_tempo : public Midi_item
168 {
169 public:
170   Midi_tempo (Audio_tempo *);
171   DECLARE_CLASSNAME (Midi_tempo);
172
173   virtual string to_string () const;
174
175   Audio_tempo *audio_;
176 };
177
178 #endif // MIDI_ITEM_HH