X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmidi-item.hh;h=55df8f34eefb51520c7977ccaa5b602fcb5cdc78;hb=7e6d1d18bac6d6d4667e614b759bf337190075fb;hp=ed5cf51a59edfb4788970dcb4d91c2532d9a6c77;hpb=6dc4e4d14a67f65f337ec1a06466e748c68dcad5;p=lilypond.git diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index ed5cf51a59..55df8f34ee 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -1,14 +1,18 @@ -// -// midiitem.hh -- part of GNU LilyPond -// -// copyright 1997 Jan Nieuwenhuizen +/* + midi-item.hh -- declare Midi items + + (c) 1997 Jan Nieuwenhuizen + */ #ifndef MIDI_ITEM_HH #define MIDI_ITEM_HH #include "string.hh" #include "lily-proto.hh" +#include "proto.hh" +#include "plist.hh" #include "virtual-methods.hh" +#include "moment.hh" /** Any piece of midi information. @@ -16,135 +20,159 @@ Maybe use base classes for RIFF files? */ struct Midi_item { - Midi_item() { } - DECLARE_MY_RUNTIME_TYPEINFO; - static String i2varint_str( int i ); - virtual void output_midi( Midi_stream& midi_stream_r ) const; - virtual String str() const = 0; + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_item (Audio_item* audio_item_l); + virtual ~Midi_item (); + static String i2varint_str (int i); + virtual String str () const = 0; + + Audio_item* audio_item_l_; + int channel_i_; + private: - Midi_item(Midi_item const&){} - void operator=(Midi_item const&){} + Midi_item (Midi_item const&); + Midi_item& operator = ( Midi_item const&); }; -struct Midi_key : public Midi_item { - Midi_key( int accidentals_i, int minor_i ); - DECLARE_MY_RUNTIME_TYPEINFO; - - virtual String str() const; - /* *************** */ - int accidentals_i_; - int minor_i_; +/** + timed MIDI event + */ +struct Midi_event +{ + Midi_event (Moment delta_mom, Midi_item* mitem_l); + ~Midi_event (); + Moment delta_mom_; + Midi_item* mitem_p_; + String str () const; }; /** - Change instrument event + variable sized MIDI data */ -struct Midi_instrument : public Midi_item { - Midi_instrument( int channel_i, String instrument_str ); - DECLARE_MY_RUNTIME_TYPEINFO; +struct Midi_chunk : Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_chunk (); - virtual String str() const; + void set (String header_str, String data_str, String footer_str); + virtual String str () const; + virtual String data_str () const; - int channel_i_; - Byte program_byte_; +private: + String data_str_; + String footer_str_; + String header_str_; }; - -struct Midi_note : public Midi_item { - /** - Generate a note-event on a channel. - @param #melreq_l# is the pitch. - */ - Midi_note( Melodic_req* melreq_l, int channel_i, bool on_b ); - DECLARE_MY_RUNTIME_TYPEINFO; +struct Midi_duration : public Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_duration (Real seconds_f); - virtual String str() const; + virtual String str () const; + Real seconds_f_; +}; - /* *************** */ - int const c0_pitch_i_c_ = 60; - Byte dynamic_byte_; +struct Midi_header : Midi_chunk { + DECLARE_MY_RUNTIME_TYPEINFO; - int channel_i_; - int on_b_; - int pitch_i_; + Midi_header (int format_i, int tracks_i, int clocks_per_4_i); }; -struct Midi_duration : public Midi_item { - Midi_duration( Real seconds_f ); - DECLARE_MY_RUNTIME_TYPEINFO; +/** + Change instrument event + */ +struct Midi_instrument : public Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_instrument (int channel_i, String instrument_str); - virtual String str() const; - /* *************** */ - Real seconds_f_; + virtual String str () const; + String instrument_str_; }; + -struct Midi_chunk : Midi_item { - Midi_chunk(); - DECLARE_MY_RUNTIME_TYPEINFO; - - void add( String str ); - void set( String header_str, String data_str, String footer_str ); - virtual String str() const; -private: - String data_str_; - String footer_str_; - String header_str_; +struct Midi_key : public Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_key (Audio_item* audio_item_l); + + virtual String str () const; }; -struct Midi_header : Midi_chunk { - /* *************** */ - Midi_header( int format_i, int tracks_i, int clocks_per_4_i ); - DECLARE_MY_RUNTIME_TYPEINFO; +struct Midi_meter : Midi_item { + + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_meter (Audio_item* audio_item_l); + + virtual String str () const; + int clocks_per_1_i_; }; -struct Midi_text : Midi_item { - - enum Type { - TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, - MARKER, CUE_POINT - }; - Midi_text( Midi_text::Type type, String text_str ); - DECLARE_MY_RUNTIME_TYPEINFO; - - virtual String str() const; - /* *************** */ - Type type_; - String text_str_; - +/** + Turn a note on (blond). + */ +struct Midi_note : public Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_note (Audio_item* audio_item_l); + + Moment duration () const; + int pitch_i () const; + virtual String str () const; + + int const c0_pitch_i_c_ = 60; + Byte dynamic_byte_; }; -struct Midi_tempo : Midi_item { - Midi_tempo( int per_minute_4_i ); - DECLARE_MY_RUNTIME_TYPEINFO; +/** + Turn a note off (dark). + */ +struct Midi_note_off : public Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_note_off (Midi_note*); - virtual String str() const; - /* *************** */ + int pitch_i () const; + virtual String str () const; - int per_minute_4_i_; + Byte aftertouch_byte_; }; -struct Midi_time : Midi_item { +struct Midi_text : Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + + enum Type { + TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, + MARKER, CUE_POINT + }; + Midi_text (Midi_text::Type type, String text_str); + Midi_text (Audio_item* audio_item_l); + + virtual String str () const; - Midi_time( int num_i, int den_i, int clocks_per_1_i ); - DECLARE_MY_RUNTIME_TYPEINFO; + Type type_; + String text_str_; +}; - virtual String str() const; +struct Midi_tempo : Midi_item { + DECLARE_MY_RUNTIME_TYPEINFO; + Midi_tempo (int per_minute_4_i); + Midi_tempo (Audio_item* audio_item_l); + + virtual String str () const; - /* *************** */ - int num_i_; - int den_i_; - int clocks_per_1_i_; + int per_minute_4_i_; }; struct Midi_track : Midi_chunk { - int number_i_; - /* *************** */ - Midi_track(); - DECLARE_MY_RUNTIME_TYPEINFO; + DECLARE_MY_RUNTIME_TYPEINFO; + int number_i_; + Pointer_list event_p_list_; + + Midi_track (); + ~Midi_track (); - void add( int delta_time_i, String event ); - void add( Moment delta_time_moment, Midi_item* mitem_l ); -}; + void add (Moment delta_time_mom, Midi_item* mitem_l); + virtual String data_str () const; -#endif // MIDI_ITEM_HH // +private: + // copy trap + Midi_track (Midi_track const&); +}; +#endif // MIDI_ITEM_HH