summaryrefslogtreecommitdiffstats
path: root/src/engine/AudioBuffer.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-24 23:12:34 +0000
committerDavid Robillard <d@drobilla.net>2010-02-24 23:12:34 +0000
commite853d3dfcf450f6160e19f20b6b67e251c906169 (patch)
tree6b62d2d1a7f3a047f141e58caee4e5e71ac1f4de /src/engine/AudioBuffer.cpp
parent784dc03a78dc338b45111ebdca45371dfaaa6fa9 (diff)
downloadingen-e853d3dfcf450f6160e19f20b6b67e251c906169.tar.gz
ingen-e853d3dfcf450f6160e19f20b6b67e251c906169.tar.bz2
ingen-e853d3dfcf450f6160e19f20b6b67e251c906169.zip
Add new Delay internal.
Preliminary work towards split cycles. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2485 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/AudioBuffer.cpp')
-rw-r--r--src/engine/AudioBuffer.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/engine/AudioBuffer.cpp b/src/engine/AudioBuffer.cpp
index 99d97e14..145df559 100644
--- a/src/engine/AudioBuffer.cpp
+++ b/src/engine/AudioBuffer.cpp
@@ -170,10 +170,23 @@ AudioBuffer::copy(Context& context, const Buffer* src)
return;
}
- // Control => Control or Audio => Audio
+ // Control => Control
if (src_abuf->is_control() == is_control()) {
ObjectBuffer::copy(context, src);
+ // Audio => Audio
+ } else if (!src_abuf->is_control() && !is_control()) {
+ copy(src_abuf->data(),
+ context.offset(), context.offset() + context.nframes() - 1);
+
+ // Audio => Control
+ } else if (!src_abuf->is_control() && is_control()) {
+ data()[0] = src_abuf->data()[context.offset()];
+
+ // Control => Audio
+ } else if (src_abuf->is_control() && !is_control()) {
+ data()[context.offset()] = src_abuf->data()[0];
+
// Control => Audio or Audio => Control
} else {
set_block(src_abuf->data()[0], 0, nframes());