Without modifying the header, the Tascam DP-32SD (a stand-alone digital multitrack recorder) is unable to “grok” (acknowledge as a valid .WAV file) a 24-bit 44.1khz monophonic .WAV file generated by sox.
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);} } } - Sam ------------------------------------------------------------------------------ _______________________________________________ SoX-devel mailing list SoX-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sox-devel