cannam@0
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
cannam@0
|
2
|
cannam@0
|
3 #ifndef _BUFFERING_AUDIO_CALLBACK_RECORD_TARGET_H_
|
cannam@0
|
4 #define _BUFFERING_AUDIO_CALLBACK_RECORD_TARGET_H_
|
cannam@0
|
5
|
cannam@0
|
6 #include "AudioCallbackRecordTarget.h"
|
Chris@16
|
7 #include "RingBuffer.h"
|
cannam@0
|
8
|
cannam@2
|
9 #define MAX_DISTINCT_STEP_SIZES 16
|
cannam@2
|
10
|
cannam@0
|
11 class BufferingAudioCallbackRecordTarget : public AudioCallbackRecordTarget
|
cannam@0
|
12 {
|
cannam@0
|
13 public:
|
cannam@0
|
14 BufferingAudioCallbackRecordTarget();
|
cannam@0
|
15 virtual ~BufferingAudioCallbackRecordTarget();
|
cannam@0
|
16
|
cannam@0
|
17 virtual size_t getPreferredSampleRate() const { return 0; }
|
cannam@0
|
18 virtual size_t getChannelCount() const { return 2; }
|
cannam@0
|
19
|
cannam@0
|
20 virtual void setSourceBlockSize(size_t bs) { m_sourceBlockSize = bs; }
|
cannam@0
|
21 virtual void setSourceSampleRate(size_t sr) { m_sourceSampleRate = sr; }
|
cannam@0
|
22 virtual void setSourceRecordLatency(size_t rl) { m_sourceRecordLatency = rl; }
|
cannam@0
|
23
|
cannam@0
|
24 size_t getSourceBlockSize() const { return m_sourceBlockSize; }
|
cannam@0
|
25 size_t getSourceSampleRate() const { return m_sourceSampleRate; }
|
cannam@0
|
26 size_t getSourceRecordLatency() const { return m_sourceRecordLatency; }
|
cannam@0
|
27
|
cannam@0
|
28 virtual void putSamples(size_t nframes, float **samples);
|
cannam@0
|
29
|
cannam@2
|
30 virtual size_t samplesReady(int reader = 0) const;
|
cannam@2
|
31 virtual size_t getSamples(size_t channel, size_t nframes, float *samples,
|
cannam@2
|
32 int reader = 0);
|
cannam@2
|
33 virtual size_t peekSamples(size_t channel, size_t nframes, float *samples,
|
cannam@2
|
34 int reader = 0);
|
cannam@2
|
35 virtual size_t skipSamples(size_t channel, size_t nframes, int reader = 0);
|
cannam@5
|
36 virtual size_t skipAllSamples(size_t channel, int reader = 0);
|
cannam@0
|
37
|
cannam@0
|
38 virtual void setInputLevels(float, float) { }
|
cannam@0
|
39
|
cannam@0
|
40 virtual void audioProcessingOverload() { }
|
cannam@0
|
41
|
cannam@0
|
42 protected:
|
cannam@2
|
43 std::vector<RingBuffer<float, MAX_DISTINCT_STEP_SIZES> *> m_buffers;
|
cannam@0
|
44
|
cannam@0
|
45 size_t m_sourceBlockSize;
|
cannam@0
|
46 size_t m_sourceSampleRate;
|
cannam@0
|
47 size_t m_sourceRecordLatency;
|
cannam@0
|
48 };
|
cannam@0
|
49
|
cannam@0
|
50 #endif
|
cannam@0
|
51
|