diff --git a/src/engine/fileOpsSample.cpp b/src/engine/fileOpsSample.cpp index 8e16cc504..ced5bb485 100644 --- a/src/engine/fileOpsSample.cpp +++ b/src/engine/fileOpsSample.cpp @@ -313,12 +313,18 @@ std::vector DivEngine::sampleFromFile(const char* path) { logD("sample is 32-bit float"); buf=new float[si.channels*si.frames]; sampleLen=sizeof(float); + } else if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_DOUBLE) { + logD("sample is 64-bit float"); + buf=new float[si.channels*si.frames]; + sampleLen=sizeof(double); } else { logD("sample is 16-bit signed"); buf=new short[si.channels*si.frames]; sampleLen=sizeof(short); } - if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_PCM_U8 || (si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_FLOAT) { + if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_PCM_U8 || + (si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_FLOAT || + (si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_DOUBLE) { if (sf_read_raw(f,buf,si.frames*si.channels*sampleLen)!=(si.frames*si.channels*sampleLen)) { logW("sample read size mismatch!"); } @@ -361,6 +367,19 @@ std::vector DivEngine::sampleFromFile(const char* path) { sample->data16[index++]=averaged; } delete[] (float*)buf; + } else if ((si.format&SF_FORMAT_SUBMASK)==SF_FORMAT_DOUBLE) { + for (int i=0; i32767.0) averaged=32767.0; + sample->data16[index++]=averaged; + } + delete[] (double*)buf; } else { for (int i=0; i