annotate audioio/BufferingAudioCallbackRecordTarget.cpp @ 17:3cbd40805795 tip

Remove obsolete stuff from README
author Chris Cannam
date Tue, 03 Dec 2013 16:33:08 +0000
parents 7fc28f7a935a
children
rev   line source
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 #include "BufferingAudioCallbackRecordTarget.h"
cannam@0 4
cannam@0 5 #define RING_BUFFER_SIZE 4194303 // 2^22-1 frames, or about 87s at 48KHz
cannam@0 6
cannam@0 7 BufferingAudioCallbackRecordTarget::BufferingAudioCallbackRecordTarget() :
cannam@0 8 m_sourceBlockSize(0),
cannam@0 9 m_sourceSampleRate(0),
cannam@0 10 m_sourceRecordLatency(0)
cannam@0 11 {
cannam@0 12 for (size_t c = 0; c < getChannelCount(); ++c) {
cannam@2 13 m_buffers.push_back(new RingBuffer<float, MAX_DISTINCT_STEP_SIZES>
cannam@2 14 (RING_BUFFER_SIZE));
cannam@0 15 }
cannam@0 16 }
cannam@0 17
cannam@0 18 BufferingAudioCallbackRecordTarget::~BufferingAudioCallbackRecordTarget()
cannam@0 19 {
cannam@0 20 for (size_t c = 0; c < getChannelCount(); ++c) {
cannam@0 21 delete m_buffers[c];
cannam@0 22 }
cannam@0 23 }
cannam@0 24
cannam@0 25 void
cannam@0 26 BufferingAudioCallbackRecordTarget::putSamples(size_t nframes, float **samples)
cannam@0 27 {
cannam@0 28 for (size_t c = 0; c < getChannelCount(); ++c) {
cannam@5 29 size_t written = nframes;
cannam@0 30 if (samples[c]) {
cannam@5 31 written = m_buffers[c]->write(samples[c], nframes);
cannam@0 32 } else {
cannam@5 33 written = m_buffers[c]->zero(nframes);
cannam@5 34 }
cannam@5 35 if (written < nframes) {
cannam@5 36 std::cerr << "WARNING: BufferingAudioCallbackRecordTarget::putSamples: Buffer overflow: wrote " << written << " of " << nframes << " samples on channel " << c << std::endl;
cannam@0 37 }
cannam@0 38 }
cannam@0 39 }
cannam@0 40
cannam@0 41 size_t
cannam@2 42 BufferingAudioCallbackRecordTarget::samplesReady(int reader) const
cannam@0 43 {
cannam@0 44 size_t ready = 0;
cannam@0 45 for (size_t c = 0; c < getChannelCount(); ++c) {
cannam@2 46 size_t readyHere = m_buffers[c]->getReadSpace(reader);
cannam@0 47 if (c == 0 || readyHere < ready) ready = readyHere;
cannam@0 48 }
cannam@0 49 return ready;
cannam@0 50 }
cannam@0 51
cannam@0 52 size_t
cannam@0 53 BufferingAudioCallbackRecordTarget::getSamples(size_t channel, size_t nframes,
cannam@2 54 float *samples, int reader)
cannam@0 55 {
cannam@2 56 return m_buffers[channel]->read(samples, nframes, reader);
cannam@0 57 }
cannam@0 58
cannam@2 59 size_t
cannam@2 60 BufferingAudioCallbackRecordTarget::peekSamples(size_t channel, size_t nframes,
cannam@2 61 float *samples, int reader)
cannam@2 62 {
cannam@2 63 return m_buffers[channel]->peek(samples, nframes, reader);
cannam@2 64 }
cannam@0 65
cannam@2 66 size_t
cannam@2 67 BufferingAudioCallbackRecordTarget::skipSamples(size_t channel, size_t nframes,
cannam@2 68 int reader)
cannam@2 69 {
cannam@2 70 return m_buffers[channel]->skip(nframes, reader);
cannam@2 71 }
cannam@2 72
cannam@5 73 size_t
cannam@5 74 BufferingAudioCallbackRecordTarget::skipAllSamples(size_t channel,
cannam@5 75 int reader)
cannam@5 76 {
cannam@5 77 return m_buffers[channel]->skip(m_buffers[channel]->getReadSpace(reader),
cannam@5 78 reader);
cannam@5 79 }
cannam@5 80