]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
release: 1.1.6
[lilypond.git] / lily / include / midi-item.hh
1 /*
2   midi-item.hh -- declare Midi items
3
4   (c)  1997--1998 Jan Nieuwenhuizen <janneke@gnu.org>
5  */
6
7 #ifndef MIDI_ITEM_HH
8 #define MIDI_ITEM_HH
9
10 #include "string.hh"
11 #include "lily-proto.hh"
12 #include "proto.hh"
13 #include "plist.hh"
14 #include "virtual-methods.hh"
15 #include "moment.hh"
16
17 /**
18   Any piece of midi information.
19
20   Maybe use base classes for RIFF files?
21  */
22 struct Midi_item {
23   
24   Midi_item (Audio_item* audio_item_l); 
25   virtual ~Midi_item ();
26   static String i2varint_str (int i);
27   virtual String str () const = 0;
28
29   Audio_item* audio_item_l_;
30   int channel_i_;
31
32 private:
33   Midi_item (Midi_item const&);
34   Midi_item& operator = ( Midi_item const&);
35 };
36
37 /**
38   timed MIDI event
39  */
40 struct Midi_event
41 {
42   Midi_event (Moment delta_mom, Midi_item* mitem_l);
43   ~Midi_event ();
44   Moment delta_mom_;
45   Midi_item* mitem_p_;
46   String str () const;
47 };
48
49 /**
50   variable sized MIDI data
51  */
52 struct Midi_chunk : Midi_item {
53   
54   Midi_chunk ();
55
56   void set (String header_str, String data_str, String footer_str);
57   virtual String str () const;
58   virtual String data_str () const;
59
60 private:
61   String data_str_;
62   String footer_str_;
63   String header_str_;
64 };
65
66 struct Midi_duration : public Midi_item {
67   
68   Midi_duration (Real seconds_f);
69
70   virtual String str () const;
71   Real seconds_f_;
72 };
73
74 struct Midi_header : Midi_chunk {
75   
76
77   Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
78 };
79
80 /**
81   Change instrument event
82  */
83 struct Midi_instrument : public Midi_item {
84   
85   Midi_instrument (int channel_i, String instrument_str);
86
87   virtual String str () const;
88   String instrument_str_;
89 };
90                                       
91
92 struct Midi_key : public Midi_item {
93   
94   Midi_key (Audio_item* audio_item_l);
95         
96   virtual String str () const;
97 };
98
99 struct Midi_time_signature : Midi_item {
100
101   
102   Midi_time_signature (Audio_item* audio_item_l); 
103   
104   virtual String str () const;
105   int clocks_per_1_i_;
106 };
107
108 /**
109   Turn a note on (blond).
110  */
111 struct Midi_note : public Midi_item {
112   
113   Midi_note (Audio_item* audio_item_l); 
114
115   Moment duration () const;
116   int pitch_i () const;
117   virtual String str () const;
118
119   static int const c0_pitch_i_c_ = 60;
120   Byte dynamic_byte_;
121 };
122
123 /**
124   Turn a note off (dark).
125  */
126 struct Midi_note_off : public Midi_item {
127   
128   Midi_note_off (Midi_note*); 
129
130   int pitch_i () const;
131   virtual String str () const;
132
133   Byte aftertouch_byte_;
134 };
135
136 struct Midi_text : Midi_item {
137   
138     
139   enum Type { 
140     TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, 
141     MARKER, CUE_POINT
142   };
143   Midi_text (Midi_text::Type type, String text_str);
144   Midi_text (Audio_item* audio_item_l);
145     
146   virtual String str () const;
147
148   Type type_;
149   String text_str_;
150 };
151
152 struct Midi_tempo : Midi_item {
153   
154   Midi_tempo (int per_minute_4_i);
155   Midi_tempo (Audio_item* audio_item_l); 
156   
157   virtual String str () const;
158
159   int per_minute_4_i_;
160 };
161
162 struct Midi_track : Midi_chunk {
163   
164   int number_i_;
165   Pointer_list<Midi_event*> event_p_list_;
166     
167   Midi_track ();
168   ~Midi_track ();
169
170   void add (Moment delta_time_mom, Midi_item* mitem_l);
171   virtual String data_str () const;
172
173 private:
174   // copy trap
175   Midi_track (Midi_track const&);
176 };
177
178 #endif // MIDI_ITEM_HH