Mercurial > hg > vamp-live-host
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 |