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;