diff options
author | David Robillard <d@drobilla.net> | 2010-02-24 23:12:34 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-24 23:12:34 +0000 |
commit | e853d3dfcf450f6160e19f20b6b67e251c906169 (patch) | |
tree | 6b62d2d1a7f3a047f141e58caee4e5e71ac1f4de /src/engine/AudioBuffer.cpp | |
parent | 784dc03a78dc338b45111ebdca45371dfaaa6fa9 (diff) | |
download | ingen-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.cpp | 15 |
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()); |