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