]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
patch::: 0.1.1.jcn1: zachte pats
[lilypond.git] / lily / include / midi-item.hh
1 /*
2   midi-item.hh -- declare Midi items
3
4   (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
5  */
6
7 #ifndef MIDI_ITEM_HH
8 #define MIDI_ITEM_HH
9
10 #include "string.hh"
11 #include "lily-proto.hh"
12
13 /**
14   Any piece of midi information.
15
16   Maybe use base classes for RIFF files?
17  */
18 struct Midi_item {
19     Midi_item( Audio_item* audio_item_l ); 
20     static String i2varint_str( int i );
21     void output( Midi_stream* midi_stream_l ) const;
22     virtual String str() const = 0;
23
24     Audio_item* audio_item_l_;
25     int channel_i_;
26
27 private:
28     Midi_item( Midi_item const& );
29     Midi_item& operator =( Midi_item const& );
30 };
31
32 struct Midi_key : public Midi_item {
33     Midi_key( Audio_item* audio_item_l );
34         
35     virtual String str() const;
36 };
37
38 /**
39   Change instrument event
40  */
41 struct Midi_instrument : public Midi_item {
42     Midi_instrument( int channel_i, String instrument_str );
43
44     virtual String str() const;
45     String instrument_str_;
46 };
47                                       
48 struct Midi_note : public Midi_item {
49     /**
50       Generate a note-event on a channel.
51
52       @param #melreq_l# is the pitch. 
53      */
54     Midi_note( Audio_item* audio_item_l ); 
55
56     virtual String str() const;
57
58     /* *************** */
59     int const c0_pitch_i_c_ = 60;
60     bool on_b_;
61     Byte dynamic_byte_;
62 };
63
64 struct Midi_duration : public Midi_item {
65     Midi_duration( Real seconds_f );
66
67     virtual String str() const;
68     /* *************** */
69     Real seconds_f_;
70 };
71
72 struct Midi_chunk : Midi_item {
73     Midi_chunk();
74
75     void add( String str );
76     void set( String header_str, String data_str, String footer_str );
77     virtual String str() const;
78 private:
79     String data_str_;
80     String footer_str_;
81     String header_str_;
82 };
83
84 struct Midi_header : Midi_chunk {
85     /* *************** */
86     Midi_header( int format_i, int tracks_i, int clocks_per_4_i );
87 };
88
89 struct Midi_text : Midi_item {
90     enum Type { 
91         TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, 
92         MARKER, CUE_POINT
93     };
94
95     Midi_text( Audio_item* audio_item_l );
96     Midi_text( Midi_text::Type type, String text_str );
97
98     virtual String str() const;
99
100     Type type_;
101     String text_str_;
102 };
103
104 struct Midi_tempo : Midi_item {
105     Midi_tempo( Audio_item* audio_item_l ); 
106     Midi_tempo( int per_minute_4_i );
107
108     virtual String str() const;
109
110     int per_minute_4_i_;
111 };
112
113 struct Midi_meter : Midi_item {
114     Midi_meter( Audio_item* audio_item_l ); 
115
116     virtual String str() const;
117     int clocks_per_1_i_;
118 };
119
120 struct Midi_track : Midi_chunk {
121     int number_i_;
122     /* *************** */
123     Midi_track();
124
125     void add( int delta_time_i, String event );
126     void add( Moment delta_time_moment, Midi_item* mitem_l );
127 };
128
129 #endif // MIDI_ITEM_HH