summaryrefslogtreecommitdiff
path: root/src/lib/delay_line.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/delay_line.cc')
-rw-r--r--src/lib/delay_line.cc102
1 files changed, 0 insertions, 102 deletions
diff --git a/src/lib/delay_line.cc b/src/lib/delay_line.cc
deleted file mode 100644
index 45d8e9d9d..000000000
--- a/src/lib/delay_line.cc
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include <stdint.h>
-#include <cstring>
-#include <algorithm>
-#include <iostream>
-#include "delay_line.h"
-#include "util.h"
-
-using std::min;
-using boost::shared_ptr;
-
-/** @param channels Number of channels of audio.
- * @param frames Delay in frames, +ve to move audio later.
- */
-DelayLine::DelayLine (Log* log, int channels, int frames)
- : AudioProcessor (log)
- , _negative_delay_remaining (0)
- , _frames (frames)
-{
- if (_frames > 0) {
- /* We need a buffer to keep some data in */
- _buffers.reset (new AudioBuffers (channels, _frames));
- _buffers->make_silent ();
- } else if (_frames < 0) {
- /* We can do -ve delays just by chopping off
- the start, so no buffer needed.
- */
- _negative_delay_remaining = -_frames;
- }
-}
-
-void
-DelayLine::process_audio (shared_ptr<AudioBuffers> data)
-{
- if (_buffers) {
- /* We have some buffers, so we are moving the audio later */
-
- /* Copy the input data */
- AudioBuffers input (*data.get ());
-
- int to_do = data->frames ();
-
- /* Write some of our buffer to the output */
- int const from_buffer = min (to_do, _buffers->frames());
- data->copy_from (_buffers.get(), from_buffer, 0, 0);
- to_do -= from_buffer;
-
- /* Write some of the input to the output */
- int const from_input = to_do;
- data->copy_from (&input, from_input, 0, from_buffer);
-
- int const left_in_buffer = _buffers->frames() - from_buffer;
-
- /* Shuffle our buffer down */
- _buffers->move (from_buffer, 0, left_in_buffer);
-
- /* Copy remaining input data to our buffer */
- _buffers->copy_from (&input, input.frames() - from_input, from_input, left_in_buffer);
-
- } else {
-
- /* Chop the initial data off until _negative_delay_remaining
- is zero, then just pass data.
- */
-
- int const to_do = min (data->frames(), _negative_delay_remaining);
- if (to_do) {
- data->move (to_do, 0, data->frames() - to_do);
- data->set_frames (data->frames() - to_do);
- _negative_delay_remaining -= to_do;
- }
- }
-
- Audio (data);
-}
-
-void
-DelayLine::process_end ()
-{
- if (_frames < 0) {
- _buffers->make_silent ();
- Audio (_buffers);
- }
-}