Created
January 21, 2024 21:37
-
-
Save ffAudio/94bc85213163dedb0eaff2e902a5ad88 to your computer and use it in GitHub Desktop.
Resample a folder of testsignals
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
============================================================================== | |
Resample the test signals in the folder | |
============================================================================== | |
*/ | |
#include <juce_core/juce_core.h> | |
#include <juce_audio_formats/juce_audio_formats.h> | |
#include <juce_dsp/juce_dsp.h> | |
int main (int, char**) | |
{ | |
constexpr auto sampleRate = 44100.0; | |
using ResamplerType=juce::ResamplingAudioSource; | |
auto folder = juce::File::getSpecialLocation (juce::File::userDesktopDirectory).getChildFile("TestSignals"); | |
auto output = folder.getChildFile("output"); | |
output.createDirectory(); | |
juce::WavAudioFormat format; | |
for (auto file : folder.findChildFiles(juce::File::findFiles, false)) | |
{ | |
if (!file.hasFileExtension(".wav")) | |
continue; | |
auto input = file.createInputStream(); | |
auto reader = format.createReaderFor(input.release(), true); | |
if (!reader) | |
{ | |
DBG ("Creating reader failed: " << file.getFullPathName()); | |
continue; | |
} | |
const auto sourceSampleRate = reader->sampleRate; | |
const auto numSourceSamples = reader->lengthInSamples; | |
const auto numChannels = reader->numChannels; | |
const auto blockSize = 512; | |
auto source = std::make_unique<juce::AudioFormatReaderSource>(reader, true); | |
auto outputFile = output.getChildFile(file.getFileName()); | |
auto outputStream = outputFile.createOutputStream(); | |
outputStream->setPosition(0); | |
outputStream->truncate(); | |
auto writer = std::unique_ptr<juce::AudioFormatWriter>(format.createWriterFor(outputStream.release(), sampleRate, reader->numChannels, reader->bitsPerSample, {}, 0)); | |
if (!writer) | |
{ | |
DBG ("Creating writer failed: " << outputFile.getFullPathName()); | |
continue; | |
} | |
auto resampler = std::make_unique<ResamplerType>(source.release(), true, numChannels); | |
juce::AudioBuffer<float> buffer (numChannels, blockSize); | |
juce::AudioSourceChannelInfo info (buffer); | |
const auto ratio = sourceSampleRate / sampleRate; | |
const auto numTargetSamples = numSourceSamples / ratio; | |
resampler->setResamplingRatio(ratio); | |
resampler->prepareToPlay(blockSize, sampleRate); | |
juce::int64 pos = 0; | |
while (pos < numTargetSamples) | |
{ | |
resampler->getNextAudioBlock(info); | |
writer->writeFromAudioSampleBuffer(buffer, 0, blockSize); | |
pos += blockSize; | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment