]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-item.hh
release: 0.0.41
[lilypond.git] / lily / include / midi-item.hh
1 //
2 //  midiitem.hh -- part of 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 "proto.hh"
10
11 struct Midi_item {
12     /* *************** */
13     static String i2varint_str( int i );
14     virtual void output_midi( Midi_stream& midi_stream_r ) const;
15     virtual String str() const = 0;
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         
23         int accidentals_i_;
24         int minor_i_;
25 };
26
27 struct Midi_note : public Midi_item {
28     /* *************** */
29     int const c0_pitch_i_c_ = 60;
30     Byte dynamic_byte_;
31
32     /**
33       Generate a note-event on a channel pitch.
34
35       @param #melreq_l# is the pitch. 
36      */
37     Midi_note( Melodic_req* melreq_l, int channel_i, bool on_b );
38
39     virtual String str() const;
40
41     int channel_i_;
42     int on_b_;
43     int pitch_i_;
44 };
45
46 struct Midi_duration : public Midi_item {
47     /* *************** */
48     Midi_duration( Real seconds_f );
49
50     virtual String str() const;
51
52     Real seconds_f_;
53 };
54
55 struct Midi_chunk : Midi_item {
56     /* *************** */
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
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 };
73
74 struct Midi_text : Midi_item {
75     /* *************** */
76         enum Type { 
77                 TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, 
78                 MARKER, CUE_POINT
79         };
80         Midi_text( Midi_text::Type type, String text_str );
81
82         virtual String str() const;
83
84         Type type_;
85         String text_str_;
86 };
87
88 struct Midi_tempo : Midi_item {
89     /* *************** */
90     Midi_tempo( int per_minute_4_i );
91
92     virtual String str() const;
93
94     int per_minute_4_i_;
95 };
96
97 struct Midi_time : Midi_item {
98     /* *************** */
99     Midi_time( int num_i, int den_i, int clocks_per_1_i );
100
101     virtual String str() const;
102
103     int num_i_;
104     int den_i_;
105     int clocks_per_1_i_;
106 };
107
108 struct Midi_track : Midi_chunk {
109     /* *************** */
110     int number_i_;
111     Midi_track( int number_i );
112
113     void add( int delta_time_i, String event );
114 //      void add( Moment delta_time_moment, Midi_item& mitem_r );
115     void add( Moment delta_time_moment, Midi_item* mitem_l );
116 };
117
118 #endif // MIDI_ITEM_HH //
119