comparison audioio/BufferingAudioCallbackRecordTarget.cpp @ 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
comparison
equal deleted inserted replaced
-1:000000000000 0:a6020bf991cd
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
3 #include "BufferingAudioCallbackRecordTarget.h"
4
5 #define RING_BUFFER_SIZE 4194303 // 2^22-1 frames, or about 87s at 48KHz
6
7 BufferingAudioCallbackRecordTarget::BufferingAudioCallbackRecordTarget() :
8 m_sourceBlockSize(0),
9 m_sourceSampleRate(0),
10 m_sourceRecordLatency(0)
11 {
12 for (size_t c = 0; c < getChannelCount(); ++c) {
13 m_buffers.push_back(new RingBuffer<float>(RING_BUFFER_SIZE));
14 }
15 }
16
17 BufferingAudioCallbackRecordTarget::~BufferingAudioCallbackRecordTarget()
18 {
19 for (size_t c = 0; c < getChannelCount(); ++c) {
20 delete m_buffers[c];
21 }
22 }
23
24 void
25 BufferingAudioCallbackRecordTarget::putSamples(size_t nframes, float **samples)
26 {
27 for (size_t c = 0; c < getChannelCount(); ++c) {
28 if (samples[c]) {
29 m_buffers[c]->write(samples[c], nframes);
30 } else {
31 m_buffers[c]->zero(nframes);
32 }
33 }
34 }
35
36 size_t
37 BufferingAudioCallbackRecordTarget::samplesReady() const
38 {
39 size_t ready = 0;
40 for (size_t c = 0; c < getChannelCount(); ++c) {
41 size_t readyHere = m_buffers[c]->getReadSpace();
42 if (c == 0 || readyHere < ready) ready = readyHere;
43 }
44 return ready;
45 }
46
47 size_t
48 BufferingAudioCallbackRecordTarget::getSamples(size_t channel, size_t nframes,
49 float *samples)
50 {
51 return m_buffers[channel]->read(samples, nframes);
52 }
53
54