Sam Trenholme <strenholme.use...@gmail.com> writes:

> 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

Try adding "-t wavpcm" before the output filename.

> 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........|

This is a standard, original Microsoft WAVEFORMAT header.  The value
0x0001 at offset 0x14 indicates PCM data.  Although the header structure
can encode arbitrary values, only 8-bit and 16-bit PCM should use this
format.

> 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....|

This is a WAVEFORMATEXTENSIBLE header, indicated by the format tag
0xfffe at file offset 0x14.  This header adds additional fields at the
end allowing arbitrary bit depths as well as various other information.
It should be used whenever the bit depth is not 8 or 16.

Sox is doing the right thing in creating a WAVEFORMATEXTENSIBLE header
for 24-bit data, but apparently the Tascam software can't understand
this format (it's not alone in this, unfortunately), instead applying
less strict rules for the basic WAVEFORMAT header (everybody does this,
and rightly so).

The "-t wavpcm" option forces sox to use the short WAVEFORMAT header
even when this goes against the spec.

For more details, see https://msdn.microsoft.com/en-us/library/dd390971.aspx

-- 
Måns Rullgård
m...@mansr.com

------------------------------------------------------------------------------
_______________________________________________
SoX-devel mailing list
SoX-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sox-devel

Reply via email to