view audioio/BufferingAudioCallbackRecordTarget.h @ 0:a6020bf991cd

* Initial import of what may or may not become a simple live visual-response host for causal Vamp plugins
author cannam
date Thu, 19 Oct 2006 16:53:48 +0000
parents
children b8f6bbf172e7
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

#ifndef _BUFFERING_AUDIO_CALLBACK_RECORD_TARGET_H_
#define _BUFFERING_AUDIO_CALLBACK_RECORD_TARGET_H_

#include "AudioCallbackRecordTarget.h"
#include "base/RingBuffer.h"

class BufferingAudioCallbackRecordTarget : public AudioCallbackRecordTarget
{
public:
    BufferingAudioCallbackRecordTarget();
    virtual ~BufferingAudioCallbackRecordTarget();

    virtual size_t getPreferredSampleRate() const { return 0; }
    virtual size_t getChannelCount() const { return 2; }
    
    virtual void setSourceBlockSize(size_t bs) { m_sourceBlockSize = bs; }
    virtual void setSourceSampleRate(size_t sr) { m_sourceSampleRate = sr; }
    virtual void setSourceRecordLatency(size_t rl) { m_sourceRecordLatency = rl; }

    size_t getSourceBlockSize() const { return m_sourceBlockSize; }
    size_t getSourceSampleRate() const { return m_sourceSampleRate; }
    size_t getSourceRecordLatency() const { return m_sourceRecordLatency; }

    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 void setInputLevels(float, float) { }

    virtual void audioProcessingOverload() { }

protected:
    std::vector<RingBuffer<float> *> m_buffers;
    
    size_t m_sourceBlockSize;
    size_t m_sourceSampleRate;
    size_t m_sourceRecordLatency;
};

#endif