]> git.donarmstrong.com Git - lilypond.git/commitdiff
MIDI volume can exceed maximum value (fix 1938)
authorHeikki Taurainen <g034737@welho.com>
Fri, 7 Oct 2011 02:14:29 +0000 (20:14 -0600)
committerColin Campbell <colinpkcampbell@gmail.com>
Fri, 7 Oct 2011 02:14:29 +0000 (20:14 -0600)
make Dynamic performer respect midiMinimumVolume
and midiMaximumVolume, also with (de)crescendi
which aren't terminated by absolute dynamic mark.

lily/audio-item.cc
lily/dynamic-performer.cc
lily/include/audio-item.hh

index 1cbf7765b70f338ff82a5b9ed004ddf47c8eebbd..e14fa2f7af1972351093b84afabc1912f505b825 100644 (file)
@@ -79,9 +79,11 @@ Audio_dynamic::Audio_dynamic ()
 {
 }
 
-Audio_span_dynamic::Audio_span_dynamic ()
+Audio_span_dynamic::Audio_span_dynamic (Real min_volume, Real max_volume)
 {
   grow_dir_ = CENTER;
+  min_volume_ = min_volume;
+  max_volume_ = max_volume;
 }
 
 void
@@ -135,7 +137,7 @@ Audio_span_dynamic::render ()
 
   Real start_v = dynamics_[0]->volume_;
   if (dynamics_.back ()->volume_ < 0)
-    dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, 1.0), 0.1);
+    dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, max_volume_), min_volume_);
 
   delta_v = dynamics_.back ()->volume_ - dynamics_[0]->volume_;
 
index 3977a77c30a2166efe89f91e6cc92c8759cc5624..be6cc166de354e1dead268333ebc9a133882831a 100644 (file)
@@ -110,7 +110,7 @@ Dynamic_performer::process_music ()
 
   if (span_events_[START])
     {
-      span_dynamic_ = new Audio_span_dynamic ();
+      span_dynamic_ = new Audio_span_dynamic (equalize_volume (0.1), equalize_volume (1.0));
       announce_element (Audio_element_info (span_dynamic_, span_events_[START]));
 
       span_dynamic_->grow_dir_ = grow_dir_[START];
index dc4bb6efbd3c1073426567205c4401cb9d540718..ee0e2e9447beb4a7dcf58367f80983342f614a7d 100644 (file)
@@ -54,10 +54,12 @@ class Audio_span_dynamic : public Audio_element
 public:
   Direction grow_dir_;
   vector<Audio_dynamic *> dynamics_;
+  Real min_volume_;
+  Real max_volume_;
 
   virtual void render ();
   void add_absolute (Audio_dynamic *);
-  Audio_span_dynamic ();
+  Audio_span_dynamic (Real min_volume, Real max_volume);
 };
 
 class Audio_key : public Audio_item