summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/audio_buffer.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-02-19 17:42:38 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-02-19 17:42:38 +0000
commitc77d116703647a72cd7d01c6735fa610a88171dd (patch)
tree5d371ba23a3b7484fd2e61456a7c023387d94e8d /libs/ardour/ardour/audio_buffer.h
parentb25f3342070dacdd17d08dd3cd6abafe87332048 (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.h19
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);
}