]> git.donarmstrong.com Git - lilypond.git/blob - hdr/midi-item.hh
partial: 0.0.38.hanjan
[lilypond.git] / hdr / midi-item.hh
1 //
2 //  midi-item.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 );
15     virtual String str() = 0;
16 };
17
18 struct Midi_note : public Midi_item {
19     /* *************** */
20     int const c0_pitch_i_c_ = 60;
21     Byte dynamic_byte_;
22
23     /**
24       Generate a note-event on a channel pitch.
25
26       @param #melreq_l# is the pitch. 
27      */
28     Midi_note( Melodic_req* melreq_l, int channel_i, bool on_b );
29
30     virtual String str();
31
32     int channel_i_;
33     int on_b_;
34     int pitch_i_;
35 };
36
37 struct Midi_duration : public Midi_item {
38     /* *************** */
39     Midi_duration( Real seconds_f );
40
41     virtual String str();
42
43     Real seconds_f_;
44 };
45
46 struct Midi_chunk : Midi_item {
47     /* *************** */
48     Midi_chunk();
49
50     void add( String str );
51     void set( String header_str, String data_str, String footer_str );
52     virtual String str();
53
54 private:
55     String data_str_;
56     String footer_str_;
57     String header_str_;
58 };
59
60 struct Midi_header : Midi_chunk {
61     /* *************** */
62     Midi_header( int format_i, int tracks_i, int clocks_per_4_i );
63 };
64
65 struct Midi_tempo : Midi_item {
66     /* *************** */
67     Midi_tempo( int tempo_i );
68
69     virtual String str();
70
71     int tempo_i_;
72 };
73
74 struct Midi_track : Midi_chunk {
75     /* *************** */
76     int number_i_;
77     Midi_track( int number_i );
78
79     void add( int delta_time_i, String event );
80 //      void add( Moment delta_time_moment, Midi_item& mitem_r );
81     void add( Moment delta_time_moment, Midi_item* mitem_l );
82 };
83
84 #endif // MIDI_ITEM_HH //
85