cannam@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@0: cannam@0: #ifndef _BUFFERING_AUDIO_CALLBACK_RECORD_TARGET_H_ cannam@0: #define _BUFFERING_AUDIO_CALLBACK_RECORD_TARGET_H_ cannam@0: cannam@0: #include "AudioCallbackRecordTarget.h" Chris@16: #include "RingBuffer.h" cannam@0: cannam@2: #define MAX_DISTINCT_STEP_SIZES 16 cannam@2: cannam@0: class BufferingAudioCallbackRecordTarget : public AudioCallbackRecordTarget cannam@0: { cannam@0: public: cannam@0: BufferingAudioCallbackRecordTarget(); cannam@0: virtual ~BufferingAudioCallbackRecordTarget(); cannam@0: cannam@0: virtual size_t getPreferredSampleRate() const { return 0; } cannam@0: virtual size_t getChannelCount() const { return 2; } cannam@0: cannam@0: virtual void setSourceBlockSize(size_t bs) { m_sourceBlockSize = bs; } cannam@0: virtual void setSourceSampleRate(size_t sr) { m_sourceSampleRate = sr; } cannam@0: virtual void setSourceRecordLatency(size_t rl) { m_sourceRecordLatency = rl; } cannam@0: cannam@0: size_t getSourceBlockSize() const { return m_sourceBlockSize; } cannam@0: size_t getSourceSampleRate() const { return m_sourceSampleRate; } cannam@0: size_t getSourceRecordLatency() const { return m_sourceRecordLatency; } cannam@0: cannam@0: virtual void putSamples(size_t nframes, float **samples); cannam@0: cannam@2: virtual size_t samplesReady(int reader = 0) const; cannam@2: virtual size_t getSamples(size_t channel, size_t nframes, float *samples, cannam@2: int reader = 0); cannam@2: virtual size_t peekSamples(size_t channel, size_t nframes, float *samples, cannam@2: int reader = 0); cannam@2: virtual size_t skipSamples(size_t channel, size_t nframes, int reader = 0); cannam@5: virtual size_t skipAllSamples(size_t channel, int reader = 0); cannam@0: cannam@0: virtual void setInputLevels(float, float) { } cannam@0: cannam@0: virtual void audioProcessingOverload() { } cannam@0: cannam@0: protected: cannam@2: std::vector *> m_buffers; cannam@0: cannam@0: size_t m_sourceBlockSize; cannam@0: size_t m_sourceSampleRate; cannam@0: size_t m_sourceRecordLatency; cannam@0: }; cannam@0: cannam@0: #endif cannam@0: