]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4938 (1/3) Add Audio_item and Midi_item subclasses for control changes
authorHeikki Tauriainen <g034737@welho.com>
Thu, 7 Jan 2016 20:02:07 +0000 (22:02 +0200)
committerJames Lowe <pkx166h@gmail.com>
Wed, 27 Jul 2016 21:54:06 +0000 (22:54 +0100)
lily/audio-item.cc
lily/include/audio-item.hh
lily/include/lily-proto.hh
lily/include/midi-item.hh
lily/midi-item.cc

index 8db787860fbb18f39ef0c7fc342cd1fc9d536df2..5c713c43ed5cdf18be6d066de203a89ea1cdb8a6 100644 (file)
@@ -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)
+{
+}
index 614fdff16b96c1f367900f1450c9a5171814ae3d..551d43f1c58715941e7c4f20a7d1eb2f07aa0dd4 100644 (file)
@@ -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);
index ee3946e0fd02921167b4a3f57d142bee0a64d017..f41c8f5a3f192f469f718c5b9e684d6523f93c13 100644 (file)
@@ -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;
index dff3f4df9b1c8738a17641b3c0f94d9157390e67..b979bca4ba60ee2ab3f2e88f99315720b0cc9764 100644 (file)
@@ -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
 */
index 7f064e24a85608b4960edce548e96b0733064944..47ccd787c3533d091fb839d2e4a5bcdf0891165e 100644 (file)
@@ -54,6 +54,8 @@ Midi_item::get_midi (Audio_item *a)
   else if (Audio_control_function_value_change *i
            = dynamic_cast<Audio_control_function_value_change *> (a))
     return new Midi_control_function_value_change (i);
+  else if (Audio_control_change *i = dynamic_cast<Audio_control_change *> (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
 {