WAVE file extended part of fmt chunk
Asked Answered
F

1

1

I have a WAVE file with a wFormatTag that is 3 (WAVE_FORMAT_IEEE_FLOAT). Firefox treats WAVE_FORMAT_IEEE_FLOAT files like WAVE_FORMAT_EXTENSIBLE, which means that it expects that a WAVE_FORMAT_IEEE_FLOAT file contains the extended part of the fmt chunk.

My file doesn't contain the extended part of the fmt chunk, which results in an error when decoding the file in Firefox: The buffer passed to decodeAudioData contains invalid content which cannot be decoded successfully.

This means I have to add wValidBitsPerSample at byte 38, dwChannelMask at byte 40 and SubFormat at byte 44. What information should I be adding for those three header fields? What is the meaning of this information and how can I add them in the form of 8-16-32bits integers?

Thanks for the help :).

Here is the header information of my file:

console.log('ckID', String.fromCharCode(dataView.getUint8(0))); // R
console.log('ckID', String.fromCharCode(dataView.getUint8(1))); // I
console.log('ckID', String.fromCharCode(dataView.getUint8(2))); // F
console.log('ckID', String.fromCharCode(dataView.getUint8(3))); // F

console.log('cksize', dataView.getUint32(4, true)); // 65623058

console.log('WAVEID', String.fromCharCode(dataView.getUint8(8))); // W
console.log('WAVEID', String.fromCharCode(dataView.getUint8(9))); // A
console.log('WAVEID', String.fromCharCode(dataView.getUint8(10))); // V
console.log('WAVEID', String.fromCharCode(dataView.getUint8(11))); // E

console.log('ckID', String.fromCharCode(dataView.getUint8(12))); // f
console.log('ckID', String.fromCharCode(dataView.getUint8(13))); // m
console.log('ckID', String.fromCharCode(dataView.getUint8(14))); // t
console.log('ckID', String.fromCharCode(dataView.getUint8(15))); //

console.log('cksize', (dataView.getUint32(16, true))); // 16

console.log('wFormatTag', (dataView.getUint16(20, true))); // 3

console.log('nChannels', (dataView.getUint16(22, true))); // 2

console.log('nSamplesPerSec', (dataView.getUint32(24, true))); // 44100

console.log('nAvgBytesPerSec', (dataView.getUint32(28, true))); // 352800

console.log('nBlockAlign', (dataView.getUint16(32, true))); // 8

console.log('wBitsPerSample', (dataView.getUint16(34, true))); // 32

console.log('cbSize', (dataView.getUint16(36, true))); // 0

console.log('ckID', String.fromCharCode(dataView.getUint8(38))); // f
console.log('ckID', String.fromCharCode(dataView.getUint8(39))); // a
console.log('ckID', String.fromCharCode(dataView.getUint8(40))); // c
console.log('ckID', String.fromCharCode(dataView.getUint8(41))); // t

console.log('cksize', (dataView.getUint16(42, true))); // 4

console.log('dwSampleLength', (dataView.getUint16(46, true))); // 10876

console.log('ckID', String.fromCharCode(dataView.getUint8(50))); // d
console.log('ckID', String.fromCharCode(dataView.getUint8(51))); // a
console.log('ckID', String.fromCharCode(dataView.getUint8(52))); // t
console.log('ckID', String.fromCharCode(dataView.getUint8(53))); // a
Fullmouthed answered 7/7, 2017 at 17:43 Comment(0)
T
0

According to https://bugzilla.mozilla.org/show_bug.cgi?id=1349658, Firefox doesn't support float32 WAV files.

Tyree answered 10/7, 2017 at 15:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.