From 7e437b2fc902db55cbf608f7ff0efb17cb6bd1dd Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sun, 11 Mar 2018 16:38:27 +0100 Subject: [PATCH] added support for 24 and 32 bit signed PCM --- wav.hh | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/wav.hh b/wav.hh index 330a7f7..2ef34ab 100644 --- a/wav.hh +++ b/wav.hh @@ -25,6 +25,8 @@ class ReadWAV : public ReadPCM v |= is.get() << (8 * i); if (b == 2 && v > 32767) v |= ~32767; + if (b == 3 && v > 8388607) + v |= ~8388607; return v; } bool cmp4(const char *a, const char *b) @@ -61,7 +63,7 @@ public: int ByteRate = readLE(4); int BlockAlign = readLE(2); bits = readLE(2); - if (bits != 8 && bits != 16) + if (bits != 8 && bits != 16 && bits != 24 && bits != 32) return; bytes = bits / 8; if (bytes * channels != BlockAlign) @@ -85,6 +87,14 @@ public: offset = 0; factor = 32767; break; + case 24: + offset = 0; + factor = 8388607; + break; + case 32: + offset = 0; + factor = 2147483647; + break; default: return; } @@ -120,6 +130,24 @@ public: min = 0; max = 255; break; + case 16: + offset = 0; + factor = 32767; + min = -32768; + max = 32767; + break; + case 24: + offset = 0; + factor = 8388607; + min = -8388608; + max = 8388607; + break; + case 32: + offset = 0; + factor = 2147483647; + min = -2147483648; + max = 2147483647; + break; default: bits = 16; bytes = 2;