Mercurial > hg > vamp-live-host
changeset 2:b8f6bbf172e7
...
author | cannam |
---|---|
date | Fri, 20 Oct 2006 15:32:33 +0000 |
parents | 4342352b8ef3 |
children | 86914ea77b7b |
files | audioio/BufferingAudioCallbackRecordTarget.cpp audioio/BufferingAudioCallbackRecordTarget.h |
diffstat | 2 files changed, 28 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/audioio/BufferingAudioCallbackRecordTarget.cpp Fri Oct 20 15:31:00 2006 +0000 +++ b/audioio/BufferingAudioCallbackRecordTarget.cpp Fri Oct 20 15:32:33 2006 +0000 @@ -10,7 +10,8 @@ m_sourceRecordLatency(0) { for (size_t c = 0; c < getChannelCount(); ++c) { - m_buffers.push_back(new RingBuffer<float>(RING_BUFFER_SIZE)); + m_buffers.push_back(new RingBuffer<float, MAX_DISTINCT_STEP_SIZES> + (RING_BUFFER_SIZE)); } } @@ -34,11 +35,11 @@ } size_t -BufferingAudioCallbackRecordTarget::samplesReady() const +BufferingAudioCallbackRecordTarget::samplesReady(int reader) const { size_t ready = 0; for (size_t c = 0; c < getChannelCount(); ++c) { - size_t readyHere = m_buffers[c]->getReadSpace(); + size_t readyHere = m_buffers[c]->getReadSpace(reader); if (c == 0 || readyHere < ready) ready = readyHere; } return ready; @@ -46,9 +47,22 @@ size_t BufferingAudioCallbackRecordTarget::getSamples(size_t channel, size_t nframes, - float *samples) + float *samples, int reader) { - return m_buffers[channel]->read(samples, nframes); + return m_buffers[channel]->read(samples, nframes, reader); } +size_t +BufferingAudioCallbackRecordTarget::peekSamples(size_t channel, size_t nframes, + float *samples, int reader) +{ + return m_buffers[channel]->peek(samples, nframes, reader); +} +size_t +BufferingAudioCallbackRecordTarget::skipSamples(size_t channel, size_t nframes, + int reader) +{ + return m_buffers[channel]->skip(nframes, reader); +} +
--- a/audioio/BufferingAudioCallbackRecordTarget.h Fri Oct 20 15:31:00 2006 +0000 +++ b/audioio/BufferingAudioCallbackRecordTarget.h Fri Oct 20 15:32:33 2006 +0000 @@ -6,6 +6,8 @@ #include "AudioCallbackRecordTarget.h" #include "base/RingBuffer.h" +#define MAX_DISTINCT_STEP_SIZES 16 + class BufferingAudioCallbackRecordTarget : public AudioCallbackRecordTarget { public: @@ -25,15 +27,19 @@ virtual void putSamples(size_t nframes, float **samples); - virtual size_t samplesReady() const; - virtual size_t getSamples(size_t channel, size_t nframes, float *samples); + virtual size_t samplesReady(int reader = 0) const; + virtual size_t getSamples(size_t channel, size_t nframes, float *samples, + int reader = 0); + virtual size_t peekSamples(size_t channel, size_t nframes, float *samples, + int reader = 0); + virtual size_t skipSamples(size_t channel, size_t nframes, int reader = 0); virtual void setInputLevels(float, float) { } virtual void audioProcessingOverload() { } protected: - std::vector<RingBuffer<float> *> m_buffers; + std::vector<RingBuffer<float, MAX_DISTINCT_STEP_SIZES> *> m_buffers; size_t m_sourceBlockSize; size_t m_sourceSampleRate;