diff --git a/architecture/faust/gui/JuceReader.h b/architecture/faust/gui/JuceReader.h index d58cc6e1fd..81832ca198 100644 --- a/architecture/faust/gui/JuceReader.h +++ b/architecture/faust/gui/JuceReader.h @@ -80,7 +80,12 @@ struct JuceReader : public SoundfileReader { if (!formatReader->usesFloatingPointData) { for (int chan = 0; chan < int(formatReader->numChannels); ++chan) { if (soundfile->fIsDouble) { - // TODO + double* buffer = &(static_cast(soundfile->fBuffers))[chan][soundfile->fOffset[part]]; + const int* intBuffer = reinterpret_cast(buffer); + // Iterate backwards: double (8 bytes) > int (4 bytes), same underlying buffer + for (int i = int(formatReader->lengthInSamples) - 1; i >= 0; --i) { + buffer[i] = double(intBuffer[i]) / double(0x7fffffff); + } } else { float* buffer = &(static_cast(soundfile->fBuffers))[chan][soundfile->fOffset[part]]; juce::FloatVectorOperations::convertFixedToFloat(buffer, reinterpret_cast(buffer),