From e22b9cb96071b681d8c108fd5218b6c2d843012b Mon Sep 17 00:00:00 2001 From: Dimitri Diakopoulos Date: Sat, 16 May 2015 23:07:50 -0700 Subject: [PATCH] move some common free functions to cpp --- include/libnyquist/Common.h | 83 +---------------------------------- src/Common.cpp | 86 +++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 81 deletions(-) diff --git a/include/libnyquist/Common.h b/include/libnyquist/Common.h index 5ac6036..bf638d5 100644 --- a/include/libnyquist/Common.h +++ b/include/libnyquist/Common.h @@ -187,89 +187,10 @@ enum PCMFormat // Src data is aligned to PCMFormat // @todo normalize? -inline void ConvertToFloat32(float * dst, const uint8_t * src, const size_t N, PCMFormat f) -{ - assert(f != PCM_END); - - if (f == PCM_U8) - { - const uint8_t * dataPtr = reinterpret_cast(src); - for (size_t i = 0; i < N; ++i) - dst[i] = uint8_to_float32(dataPtr[i]); - } - else if (f == PCM_S8) - { - const int8_t * dataPtr = reinterpret_cast(src); - for (size_t i = 0; i < N; ++i) - dst[i] = int8_to_float32(dataPtr[i]); - } - else if (f == PCM_16) - { - const int16_t * dataPtr = reinterpret_cast(src); - for (size_t i = 0; i < N; ++i) - dst[i] = int16_to_float32(Read16(dataPtr[i])); - } - else if (f == PCM_24) - { - const uint8_t * dataPtr = reinterpret_cast(src); - size_t c = 0; - for (size_t i = 0; i < N; ++i) - { - int32_t sample = Pack(dataPtr[c], dataPtr[c+1], dataPtr[c+2]); - dst[i] = int24_to_float32(sample); // Packed types don't need addtional endian helpers - c += 3; - } - } - else if (f == PCM_32) - { - const int32_t * dataPtr = reinterpret_cast(src); - for (size_t i = 0; i < N; ++i) - dst[i] = int32_to_float32(Read32(dataPtr[i])); - } - - //@todo add int64 format - - else if (f == PCM_FLT) - { - const float * dataPtr = reinterpret_cast(src); - for (size_t i = 0; i < N; ++i) - dst[i] = (float) Read32(dataPtr[i]); - } - else if (f == PCM_DBL) - { - const double * dataPtr = reinterpret_cast(src); - for (size_t i = 0; i < N; ++i) - dst[i] = (float) Read64(dataPtr[i]); - } -} +void ConvertToFloat32(float * dst, const uint8_t * src, const size_t N, PCMFormat f); // Src data is always aligned to 4 bytes (WavPack, primarily) -inline void ConvertToFloat32(float * dst, const int32_t * src, const size_t N, PCMFormat f) -{ - assert(f != PCM_END); - - if (f == PCM_16) - { - for (size_t i = 0; i < N; ++i) - dst[i] = int16_to_float32(Read32(src[i])); - } - else if (f == PCM_24) - { - const uint8_t * dataPtr = reinterpret_cast(src); - size_t c = 0; - for (size_t i = 0; i < N; ++i) - { - int32_t sample = Pack(dataPtr[c], dataPtr[c+1], dataPtr[c+2]); - dst[i] = int24_to_float32(sample); - c += 4; // +4 for next 4 byte boundary - } - } - else if (f == PCM_32) - { - for (size_t i = 0; i < N; ++i) - dst[i] = int32_to_float32(Read32(src[i])); - } -} +void ConvertToFloat32(float * dst, const int32_t * src, const size_t N, PCMFormat f); ////////////////////////// // User Data + File Ops // diff --git a/src/Common.cpp b/src/Common.cpp index ac12f9c..db32a66 100644 --- a/src/Common.cpp +++ b/src/Common.cpp @@ -34,3 +34,89 @@ NyquistFileBuffer nqr::ReadFile(std::string pathToFile) // Copy out to user return data; } + +// Src data is aligned to PCMFormat +// @todo normalize? +void nqr::ConvertToFloat32(float * dst, const uint8_t * src, const size_t N, PCMFormat f) +{ + assert(f != PCM_END); + + if (f == PCM_U8) + { + const uint8_t * dataPtr = reinterpret_cast(src); + for (size_t i = 0; i < N; ++i) + dst[i] = uint8_to_float32(dataPtr[i]); + } + else if (f == PCM_S8) + { + const int8_t * dataPtr = reinterpret_cast(src); + for (size_t i = 0; i < N; ++i) + dst[i] = int8_to_float32(dataPtr[i]); + } + else if (f == PCM_16) + { + const int16_t * dataPtr = reinterpret_cast(src); + for (size_t i = 0; i < N; ++i) + dst[i] = int16_to_float32(Read16(dataPtr[i])); + } + else if (f == PCM_24) + { + const uint8_t * dataPtr = reinterpret_cast(src); + size_t c = 0; + for (size_t i = 0; i < N; ++i) + { + int32_t sample = Pack(dataPtr[c], dataPtr[c+1], dataPtr[c+2]); + dst[i] = int24_to_float32(sample); // Packed types don't need addtional endian helpers + c += 3; + } + } + else if (f == PCM_32) + { + const int32_t * dataPtr = reinterpret_cast(src); + for (size_t i = 0; i < N; ++i) + dst[i] = int32_to_float32(Read32(dataPtr[i])); + } + + //@todo add int64 format + + else if (f == PCM_FLT) + { + const float * dataPtr = reinterpret_cast(src); + for (size_t i = 0; i < N; ++i) + dst[i] = (float) Read32(dataPtr[i]); + } + else if (f == PCM_DBL) + { + const double * dataPtr = reinterpret_cast(src); + for (size_t i = 0; i < N; ++i) + dst[i] = (float) Read64(dataPtr[i]); + } +} + +// Src data is always aligned to 4 bytes (WavPack, primarily) +void nqr::ConvertToFloat32(float * dst, const int32_t * src, const size_t N, PCMFormat f) +{ + assert(f != PCM_END); + + if (f == PCM_16) + { + for (size_t i = 0; i < N; ++i) + dst[i] = int16_to_float32(Read32(src[i])); + } + else if (f == PCM_24) + { + const uint8_t * dataPtr = reinterpret_cast(src); + size_t c = 0; + for (size_t i = 0; i < N; ++i) + { + int32_t sample = Pack(dataPtr[c], dataPtr[c+1], dataPtr[c+2]); + dst[i] = int24_to_float32(sample); + c += 4; // +4 for next 4 byte boundary + } + } + else if (f == PCM_32) + { + for (size_t i = 0; i < N; ++i) + dst[i] = int32_to_float32(Read32(src[i])); + } +}