| 43 | } |
| 44 | |
| 45 | void SourceAudioManager::processBlock(const AudioBuffer<float>& inBuffer) |
| 46 | { |
| 47 | if (mIsRecording) { |
| 48 | ScopedLock sl(mWriterLock); |
| 49 | |
| 50 | // Write incoming audio to file at native sample rate |
| 51 | bool result = mThreadedWriter->write(inBuffer.getArrayOfReadPointers(), inBuffer.getNumSamples()); |
| 52 | jassertquiet(result); |
| 53 | mNumSamplesAcquired += inBuffer.getNumSamples(); |
| 54 | mDuration = static_cast<double>(mNumSamplesAcquiredDown) / BASIC_PITCH_SAMPLE_RATE; |
| 55 | |
| 56 | // Downmix to mono |
| 57 | mInternalMonoBuffer.copyFrom(0, 0, inBuffer, 0, 0, inBuffer.getNumSamples()); |
| 58 | for (int ch = 1; ch < inBuffer.getNumChannels(); ch++) { |
| 59 | mInternalMonoBuffer.addFrom(0, 0, inBuffer, ch, 0, inBuffer.getNumSamples()); |
| 60 | } |
| 61 | |
| 62 | mInternalMonoBuffer.applyGain(1.0f / static_cast<float>(inBuffer.getNumChannels())); |
| 63 | |
| 64 | // Downsample to basic pitch sample rate |
| 65 | int num_samples_down = mDownSampler.processBlock(mInternalMonoBuffer.getReadPointer(0), |
| 66 | mInternalDownsampledBuffer.getWritePointer(0), |
| 67 | inBuffer.getNumSamples()); |
| 68 | jassert(num_samples_down <= mInternalDownsampledBuffer.getNumSamples()); |
| 69 | |
| 70 | // Write downsampled audio to file at downsampled sample rate |
| 71 | bool result_down = |
| 72 | mThreadedWriterDown->write(mInternalDownsampledBuffer.getArrayOfReadPointers(), num_samples_down); |
| 73 | jassertquiet(result_down); |
| 74 | |
| 75 | mNumSamplesAcquiredDown += num_samples_down; |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | void SourceAudioManager::startRecording() |
| 80 | { |
nothing calls this directly
no outgoing calls
no test coverage detected