From 2bbf0334903db23ad9cb3d3fcbf826cf41d45546 Mon Sep 17 00:00:00 2001 From: Heikki Taurainen Date: Thu, 6 Oct 2011 20:14:29 -0600 Subject: [PATCH] MIDI volume can exceed maximum value (fix 1938) make Dynamic performer respect midiMinimumVolume and midiMaximumVolume, also with (de)crescendi which aren't terminated by absolute dynamic mark. --- lily/audio-item.cc | 6 ++++-- lily/dynamic-performer.cc | 2 +- lily/include/audio-item.hh | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lily/audio-item.cc b/lily/audio-item.cc index 1cbf7765b7..e14fa2f7af 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -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_; diff --git a/lily/dynamic-performer.cc b/lily/dynamic-performer.cc index 3977a77c30..be6cc166de 100644 --- a/lily/dynamic-performer.cc +++ b/lily/dynamic-performer.cc @@ -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]; diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index dc4bb6efbd..ee0e2e9447 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -54,10 +54,12 @@ class Audio_span_dynamic : public Audio_element public: Direction grow_dir_; vector 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 -- 2.39.5