don't apply inverse fades if a region is not acoustically opaque

git-svn-id: svn://localhost/ardour2/branches/3.0@12294 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-05-15 15:24:14 +00:00
parent fc334a06b5
commit 2fb30ea54d

View file

@ -620,6 +620,8 @@ AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer,
*/ */
if (fade_in_limit != 0) { if (fade_in_limit != 0) {
if (opaque()) {
if (_inverse_fade_in) { if (_inverse_fade_in) {
/* explicit inverse fade in curve (e.g. for constant /* explicit inverse fade in curve (e.g. for constant
@ -649,6 +651,10 @@ AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer,
buf[n] *= 1 - gain_buffer[n]; buf[n] *= 1 - gain_buffer[n];
} }
} }
} else {
_fade_in->curve().get_vector (internal_offset, internal_offset + fade_in_limit, gain_buffer, fade_in_limit);
}
/* Mix our newly-read data in, with the fade */ /* Mix our newly-read data in, with the fade */
for (framecnt_t n = 0; n < fade_in_limit; ++n) { for (framecnt_t n = 0; n < fade_in_limit; ++n) {
@ -660,6 +666,7 @@ AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer,
framecnt_t const curve_offset = fade_interval_start - (_length - _fade_out->back()->when); framecnt_t const curve_offset = fade_interval_start - (_length - _fade_out->back()->when);
if (opaque()) {
if (_inverse_fade_out) { if (_inverse_fade_out) {
_inverse_fade_out->curve().get_vector (curve_offset, curve_offset + fade_out_limit, gain_buffer, fade_out_limit); _inverse_fade_out->curve().get_vector (curve_offset, curve_offset + fade_out_limit, gain_buffer, fade_out_limit);
@ -685,6 +692,9 @@ AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer,
buf[m] *= 1 - gain_buffer[n]; buf[m] *= 1 - gain_buffer[n];
} }
} }
} else {
_fade_out->curve().get_vector (curve_offset, curve_offset + fade_out_limit, gain_buffer, fade_out_limit);
}
/* Mix our newly-read data out, with the fade */ /* Mix our newly-read data out, with the fade */
for (framecnt_t n = 0, m = fade_out_offset; n < fade_out_limit; ++n, ++m) { for (framecnt_t n = 0, m = fade_out_offset; n < fade_out_limit; ++n, ++m) {