]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/midi-item.cc
patch::: 1.3.58.jcn2
[lilypond.git] / lily / midi-item.cc
index b822a6655e51eb3fe97f2f242aee6596036945fb..7afd3d69e2450be871c17da9a43787abd0fa7825 100644 (file)
@@ -29,6 +29,8 @@ Midi_item::midi_p (Audio_item* a)
     return new Midi_note (i);
   else if (Audio_dynamic* i = dynamic_cast<Audio_dynamic*> (a))
     return new Midi_dynamic (i);
+  else if (Audio_piano_pedal* i = dynamic_cast<Audio_piano_pedal*> (a))
+    return new Midi_piano_pedal (i);
   else if (Audio_tempo* i = dynamic_cast<Audio_tempo*> (a))
     return new Midi_tempo (i);
   else if (Audio_time_signature* i = dynamic_cast<Audio_time_signature*> (a))
@@ -476,8 +478,39 @@ Midi_dynamic::str () const
     07 MSB
     27 LSB
    */
+  static Real const full_scale = 127;
+  
+  int volume = (int)(audio_l_->volume_*full_scale);
+  if (volume <= 0)
+    volume = 1;
+  if (volume > full_scale)
+    volume = (int)full_scale;
+
   str += to_str ((char)0x07);
-  str += to_str ((char)audio_l_->volume_i_);
+  str += to_str ((char)volume);
+  return str;
+}
+
+Midi_piano_pedal::Midi_piano_pedal (Audio_piano_pedal* a)
+{
+  audio_l_ = a;
+}
+
+String
+Midi_piano_pedal::str () const
+{
+  Byte status_byte = (char) (0xB0 + channel_i_);
+  String str = to_str ((char)status_byte);
+
+  if (audio_l_->type_str_ == "Sostenuto")
+    str += to_str ((char)0x42);
+  else if (audio_l_->type_str_ == "Sustain")
+    str += to_str ((char)0x40);
+  else if (audio_l_->type_str_ == "UnaChorda")
+    str += to_str ((char)0x43);
+
+  int pedal = ((1 - audio_l_->dir_) / 2 ) * 0x7f;
+  str += to_str ((char)pedal);
   return str;
 }