diff --git a/gtk2_ardour/ardour_ui_aaf.cc b/gtk2_ardour/ardour_ui_aaf.cc index 2dd600a3b4..2538603b23 100644 --- a/gtk2_ardour/ardour_ui_aaf.cc +++ b/gtk2_ardour/ardour_ui_aaf.cc @@ -274,9 +274,23 @@ set_region_gain (aafiAudioClip* aafAudioClip, std::shared_ptr region, Se std::shared_ptr ar = std::dynamic_pointer_cast (region); std::shared_ptr al = ar->envelope (); - for (unsigned int i = 0; i < level->pts_cnt; ++i) { - al->fast_simple_add (timepos_t (aafRationalToFloat (level->time[i]) * region->length ().samples ()), aafRationalToFloat (level->value[i])); + assert (level->pts_cnt > 0); + + al->freeze (); + al->clear (); + if (aafRationalToFloat (level->time[0]) > 0.) { + /* add initial point */ + al->add (timepos_t (timepos_t (Temporal::AudioTime)), aafRationalToFloat (level->value[0]), false, false); } + for (unsigned int i = 0; i < level->pts_cnt; ++i) { + al->add (timepos_t (aafRationalToFloat (level->time[i]) * region->length ().samples ()), aafRationalToFloat (level->value[i]), false, false); + } + int last = level->pts_cnt - 1; + if (aafRationalToFloat (level->time[last]) < 1.) { + al->add (timepos_t (region->length ().samples ()), aafRationalToFloat (level->value[last]), false, false); + } + al->thaw (); + ar->set_envelope_active (true); } }