Potential fix for AAF region gain

This commit is contained in:
Robin Gareus
2025-08-27 13:19:05 +02:00
parent f8377cf3b0
commit a4e9b242e8

View File

@@ -274,9 +274,23 @@ set_region_gain (aafiAudioClip* aafAudioClip, std::shared_ptr<Region> region, Se
std::shared_ptr<AudioRegion> ar = std::dynamic_pointer_cast<AudioRegion> (region);
std::shared_ptr<AutomationList> 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);
}
}