mirror of
https://github.com/aicodix/dsp.git
synced 2026-04-27 14:30:36 +00:00
added support for 24 and 32 bit signed PCM
This commit is contained in:
parent
823b069f9b
commit
7e437b2fc9
1 changed files with 29 additions and 1 deletions
30
wav.hh
30
wav.hh
|
|
@ -25,6 +25,8 @@ class ReadWAV : public ReadPCM<TYPE>
|
|||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue