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