Indeed, the createReaderFor is not yet converted to return an unique_ptr. But you can create one yourself:
void readAudioFile(AudioSampleBuffer& buffer, const void* data, size_t sizeBytes)
{
WavAudioFormat wavFormat;
auto* inputStream = new MemoryInputStream (data, sizeBytes, false); // createReaderFor will take ownership
std::unique_ptr<AudioFormatReader> reader (wavFormat.createReaderFor (inputStream, false));
if (reader.get() != nullptr)
{
buffer.setSize(reader->numChannels, reader->lengthInSamples);
reader->read(&buffer, 0, reader->lengthInSamples, 0, true, true);
}
else
{
// if createReaderFor failed, it will not delete, so you could use the inputStream in a fallback
delete inputStream;
}
// reader is automatically deleted by using uique_ptr
}
Hope that helps (and I didn’t make any typo / mistakes
)
EDIT: and reading the docs simplifies things, the bool in createReaderFor allows the stream to be always deleted:
void readAudioFile(AudioSampleBuffer& buffer, const void* data, size_t sizeBytes)
{
WavAudioFormat wavFormat;
std::unique_ptr<AudioFormatReader> reader (wavFormat.createReaderFor (new MemoryInputStream (data, sizeBytes, false), true);
if (reader.get() != nullptr)
{
buffer.setSize(reader->numChannels, reader->lengthInSamples);
reader->read(&buffer, 0, reader->lengthInSamples, 0, true, true);
}
// reader is automatically deleted by using uique_ptr
}
