- Joined
- Mar 9, 2015
- Messages
- 96
- Karma
- 103
- Gear owned
- DP-32SD
Without modifying the header, the Tascam DP-32SD is unable to “grok” (acknowledge as a valid .WAV file) a 24-bit 44.1khz monophonic .WAV file generated by the open-source SoX program, available here: http://sox.sourceforge.net/
Because of this, the Tascam DP-32SD is unable to import 24-bit/44.1 SoX-generated files via the “Audio Depot” unless the .WAV header is altered.
Steps to reproduce
Use the SoX program to generate a 24-bit wav file. For example:
sox foo.wav -b24 bar.wav gain -9
Put the resulting bar.wav file in the “Audio Depot” folder, and attempt to import the file in to the DP32SD.
Expected results
The file is visible and can be imported in to the DP-32SD.
Actual results
WAV files generated by Sox are not visible in the DP-32SD until they are altered.
Technical details
A Tascam DP-32SD has, for an “audio depot” 24/44.1 file header, the following bytes (this is “hexdump” format; the numbers on the left are hexadecimal numbers; the ASCII that follows is a representation of the data):
00000000 52 49 46 46 XX XX XX XX 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt |
00000010 10 00 00 00 01 00 01 00 44 ac 00 00 cc 04 02 00 |........D.......|
00000020 03 00 18 00 64 61 74 61 WW WW WW WW WW WW WW WW |....data........|
The “XX” bytes above are a 32-bit little-endian representation of the length of the file, and vary depending on the file length. “WW” is audio data.
SoX, on the other hand, generates a 24/44.1 wav file with the following header:
00000000 52 49 46 46 XX XX XX XX 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt |
00000010 28 00 00 00 fe ff 01 00 44 ac 00 00 cc 04 02 00 |(.......D.......|
00000020 03 00 18 00 16 00 18 00 04 00 00 00 01 00 00 00 |................|
00000030 00 00 10 00 80 00 00 aa 00 38 9b 71 66 61 63 74 |.........8.qfact|
00000040 04 00 00 00 14 f5 5f 00 64 61 74 61 WW WW WW WW |......_.data....|
Again “XX” is length, and “WW” is audio data.
The following C program takes a Sox-generated 24/44.1 Wav file on the standard input, and outputs a DP-32SD compatible file:
// Public Domain 2015 Sam Trenholme
// The DP32SD can not grok 24-bit/44.1 WAV files generated by SOX. This
// fixes the headers so that Tascam's DP32SD can understand them.
// Standard input: SOX-generated WAV file
// Standard output: DP32SD-comparible WAV file
#include <stdio.h>
main() {
int b;
int a;
for(a=0;a<16;a++) {
b = getc(stdin);
printf("%c",b);
}
int c;
printf("%c%c%c%c%c%c%c%c",0x10,0,0,0,1,0,1,0);
printf("%c%c%c%c%c%c%c%c",0x44,0xac,0,0,0xcc,4,2,0);
printf("%c%c%c%cdata",3,0,0x18,0);
for(a=0;a<60;a++) { getc(stdin); }
while(!feof(stdin)) {
b=getc(stdin);
if(!feof(stdin)) {printf("%c",b);}
}
}
Because of this, the Tascam DP-32SD is unable to import 24-bit/44.1 SoX-generated files via the “Audio Depot” unless the .WAV header is altered.
Steps to reproduce
Use the SoX program to generate a 24-bit wav file. For example:
sox foo.wav -b24 bar.wav gain -9
Put the resulting bar.wav file in the “Audio Depot” folder, and attempt to import the file in to the DP32SD.
Expected results
The file is visible and can be imported in to the DP-32SD.
Actual results
WAV files generated by Sox are not visible in the DP-32SD until they are altered.
Technical details
A Tascam DP-32SD has, for an “audio depot” 24/44.1 file header, the following bytes (this is “hexdump” format; the numbers on the left are hexadecimal numbers; the ASCII that follows is a representation of the data):
00000000 52 49 46 46 XX XX XX XX 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt |
00000010 10 00 00 00 01 00 01 00 44 ac 00 00 cc 04 02 00 |........D.......|
00000020 03 00 18 00 64 61 74 61 WW WW WW WW WW WW WW WW |....data........|
The “XX” bytes above are a 32-bit little-endian representation of the length of the file, and vary depending on the file length. “WW” is audio data.
SoX, on the other hand, generates a 24/44.1 wav file with the following header:
00000000 52 49 46 46 XX XX XX XX 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt |
00000010 28 00 00 00 fe ff 01 00 44 ac 00 00 cc 04 02 00 |(.......D.......|
00000020 03 00 18 00 16 00 18 00 04 00 00 00 01 00 00 00 |................|
00000030 00 00 10 00 80 00 00 aa 00 38 9b 71 66 61 63 74 |.........8.qfact|
00000040 04 00 00 00 14 f5 5f 00 64 61 74 61 WW WW WW WW |......_.data....|
Again “XX” is length, and “WW” is audio data.
The following C program takes a Sox-generated 24/44.1 Wav file on the standard input, and outputs a DP-32SD compatible file:
// Public Domain 2015 Sam Trenholme
// The DP32SD can not grok 24-bit/44.1 WAV files generated by SOX. This
// fixes the headers so that Tascam's DP32SD can understand them.
// Standard input: SOX-generated WAV file
// Standard output: DP32SD-comparible WAV file
#include <stdio.h>
main() {
int b;
int a;
for(a=0;a<16;a++) {
b = getc(stdin);
printf("%c",b);
}
int c;
printf("%c%c%c%c%c%c%c%c",0x10,0,0,0,1,0,1,0);
printf("%c%c%c%c%c%c%c%c",0x44,0xac,0,0,0xcc,4,2,0);
printf("%c%c%c%cdata",3,0,0x18,0);
for(a=0;a<60;a++) { getc(stdin); }
while(!feof(stdin)) {
b=getc(stdin);
if(!feof(stdin)) {printf("%c",b);}
}
}