diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-19 17:42:38 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-19 17:42:38 +0000 |
commit | c77d116703647a72cd7d01c6735fa610a88171dd (patch) | |
tree | 5d371ba23a3b7484fd2e61456a7c023387d94e8d /libs/ardour/ardour/audio_buffer.h | |
parent | b25f3342070dacdd17d08dd3cd6abafe87332048 (diff) |
first pass at full output & gain coefficient interpolation for VBAP panning
git-svn-id: svn://localhost/ardour2/branches/3.0@8902 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour/audio_buffer.h')
-rw-r--r-- | libs/ardour/ardour/audio_buffer.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libs/ardour/ardour/audio_buffer.h b/libs/ardour/ardour/audio_buffer.h index 6c5a0a0832..403a70232f 100644 --- a/libs/ardour/ardour/audio_buffer.h +++ b/libs/ardour/ardour/audio_buffer.h @@ -113,6 +113,25 @@ public: _written = true; } + /** Accumulate (add) @a len frames FROM THE START OF @a src into self + * scaling by @a gain_coeff */ + void accumulate_with_ramped_gain_from (const Sample* src, framecnt_t len, gain_t initial, gain_t target, framecnt_t dst_offset = 0) { + + assert(_capacity > 0); + assert(len <= _capacity); + + Sample* dst = _data + dst_offset; + gain_t gain_delta = (target - initial)/len; + + for (framecnt_t n = 0; n < len; ++n) { + *dst++ += (*src++ * initial); + initial += gain_delta; + } + + _silent = (_silent && initial == 0 && target == 0); + _written = true; + } + void apply_gain (gain_t gain, framecnt_t len) { apply_gain_to_buffer (_data, len, gain); } |