I’m trying to fill an AudioSampleBuffer (AudioBuffer) with a selected channel of audio from a multi-channel WAV file is there any built-in support for this using an AudioFormatReader or do I need to write this one myself?
My ultimate goal is to create a new audio file which only contains the channels I require from the multi-channel WAV file. I have my own classes to do this where I don’t use JUCE, but I’d prefer to use the JUCE API.
Okay… a bit of a runaround… but this works…
pReader = pFormatManager->createReaderFor (File (szSrcPath));
header.numChannels = pReader->numChannels;
header.sampleRate = pReader->sampleRate;
header.lengthInSamples = pReader->lengthInSamples;
header.bitsPerSample = pReader->bitsPerSample;
AudioSampleBuffer mainBuffer (header.numChannels, header.lengthInSamples);
AudioSampleBuffer destBuffer (2, header.lengthInSamples);
pReader->read (&mainBuffer, 0, header.lengthInSamples, 0, true, true); // Fill mainBuffer with all data
destBuffer.copyFrom (0, 0, mainBuffer, 0, 0, header.lengthInSamples); // Copy chan 1
destBuffer.copyFrom (1, 0, mainBuffer, 1, 0, header.lengthInSamples); // Copy chan 2
pWriter = wav.createWriterFor (pFos, pReader->sampleRate, 2, pReader->bitsPerSample, nullptr, 0);
pWriter->writeFromAudioSampleBuffer (destBuffer, 0, header.lengthInSamples); // Write the new file
AudioFormatReader::read docs could be improved.
I’m working on surround and multi-channel support for most of the readers and writers. It’s super easy for the CoreAudio reader/writer but a bit more work for the other readers and writers. It’s not top-priority atm so it may take a while until it’s finished.