From 9a4823e6a9b1283cac7e2d48a1a21c6142a92a9d Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Fri, 12 Dec 2025 09:59:42 +0300 Subject: [PATCH] - optimize audio file reading --- src/engine/audio/Audio_WavFile.cpp | 10 +++++++++- src/engine/audio/Audio_WavFile.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/engine/audio/Audio_WavFile.cpp b/src/engine/audio/Audio_WavFile.cpp index 63e030a5..54d6f840 100644 --- a/src/engine/audio/Audio_WavFile.cpp +++ b/src/engine/audio/Audio_WavFile.cpp @@ -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; } diff --git a/src/engine/audio/Audio_WavFile.h b/src/engine/audio/Audio_WavFile.h index 9eae3877..4d342241 100644 --- a/src/engine/audio/Audio_WavFile.h +++ b/src/engine/audio/Audio_WavFile.h @@ -32,6 +32,7 @@ protected: Resampler mResampler; unsigned mLastError = 0; std::unique_ptr 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