From: Heikki Tauriainen Date: Thu, 7 Jan 2016 20:02:07 +0000 (+0200) Subject: Issue 4938 (1/3) Add Audio_item and Midi_item subclasses for control changes X-Git-Url: https://git.donarmstrong.com/?p=lilypond.git;a=commitdiff_plain;h=528d28e079419b3a45098b42b8b2b4eb9f1b15b1 Issue 4938 (1/3) Add Audio_item and Midi_item subclasses for control changes --- diff --git a/lily/audio-item.cc b/lily/audio-item.cc index 8db787860f..5c713c43ed 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -222,3 +222,9 @@ Audio_control_function_value_change::context_properties_[] = { // extra element to signify the end of the mapping, must be kept last { 0, NUM_CONTROLS, 0.0, 0.0 } }; + +Audio_control_change::Audio_control_change (int control, int value) + : control_ (control), + value_ (value) +{ +} diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 614fdff16b..551d43f1c5 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -176,6 +176,15 @@ public: Real value_; }; +class Audio_control_change : public Audio_item +{ +public: + Audio_control_change (int control, int value); + + int control_; + int value_; +}; + int moment_to_ticks (Moment); Real moment_to_real (Moment); Moment remap_grace_duration (Moment); diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index ee3946e0fd..f41c8f5a3f 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -24,6 +24,7 @@ class All_font_metrics; class Audio_column; +class Audio_control_change; class Audio_control_function_value_change; class Audio_dynamic; class Audio_element; @@ -90,6 +91,7 @@ class Lyric_engraver; class Lyric_performer; class Mensural_ligature_engraver; class Midi_chunk; +class Midi_control_change; class Midi_control_function_value_change; class Midi_duration; class Midi_dynamic; diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index dff3f4df9b..b979bca4ba 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -75,6 +75,20 @@ public: Real seconds_; }; +/** + MIDI control change +*/ +class Midi_control_change : public Midi_channel_item +{ +public: + DECLARE_CLASSNAME (Midi_control_change); + Midi_control_change (Audio_control_change *ai); + virtual ~Midi_control_change (); + virtual string to_string () const; + + Audio_control_change *audio_; +}; + /** Change instrument event */ diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 7f064e24a8..47ccd787c3 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -54,6 +54,8 @@ Midi_item::get_midi (Audio_item *a) else if (Audio_control_function_value_change *i = dynamic_cast (a)) return new Midi_control_function_value_change (i); + else if (Audio_control_change *i = dynamic_cast (a)) + return new Midi_control_change (i); else assert (0); @@ -111,6 +113,12 @@ Midi_control_function_value_change { } +Midi_control_change::Midi_control_change (Audio_control_change *ai) + : Midi_channel_item (ai), + audio_ (ai) +{ +} + Midi_item::~Midi_item () { } @@ -123,6 +131,10 @@ Midi_control_function_value_change::~Midi_control_function_value_change () { } +Midi_control_change::~Midi_control_change () +{ +} + string int2midi_varint_string (int i) { @@ -388,6 +400,16 @@ Midi_control_function_value_change::to_string () const return str; } +string +Midi_control_change::to_string () const +{ + Byte status_byte = (char) (0xB0 + channel_); + string str = ::to_string ((char)status_byte); + str += ::to_string ((char) (audio_->control_)); + str += ::to_string ((char) (audio_->value_)); + return str; +} + char const * Midi_item::name () const {