- optimize audio file reading

This commit is contained in:
Dmytro Bogovych 2025-12-12 09:59:42 +03:00
parent c3deb8378d
commit 9a4823e6a9
2 changed files with 10 additions and 1 deletions

View File

@ -207,7 +207,13 @@ size_t WavFileReader::read(short* buffer, size_t samples)
// Get number of samples that must be read from source file
size_t requiredBytes = mResampler.getSourceLength(samples) * mChannels * mBits / 8;
void* temp = alloca(requiredBytes);
bool useHeap = requiredBytes > sizeof mTempBuffer;
void* temp;
if (useHeap)
temp = malloc(requiredBytes);
else
temp = mTempBuffer;
memset(temp, 0, requiredBytes);
// Find required size of input buffer
@ -226,6 +232,8 @@ size_t WavFileReader::read(short* buffer, size_t samples)
size_t result = mResampler.processBuffer(temp, readBytes, processedBytes,
buffer, samples * 2 * AUDIO_CHANNELS);
if (useHeap)
free(temp);
return result / 2 / AUDIO_CHANNELS;
}

View File

@ -32,6 +32,7 @@ protected:
Resampler mResampler;
unsigned mLastError = 0;
std::unique_ptr<std::ifstream> mInput;
uint8_t mTempBuffer[16384];
std::string readChunk();
void readBuffer(void* buffer, size_t sz); // This raises an exception if sz bytes are not read