我有一個WAVE文件,其中wFormatTag
是3(WAVE_FORMAT_IEEE_FLOAT
)。 Firefox會對待WAVE_FORMAT_IEEE_FLOAT
這樣的文件,如WAVE_FORMAT_EXTENSIBLE
,這意味着它期望WAVE_FORMAT_IEEE_FLOAT
文件包含fmt塊的擴展部分。WAVE文件fmt塊的擴展部分
我的文件不包含FMT塊的延伸部分,在Firefox文件解碼時,這導致了一個錯誤:The buffer passed to decodeAudioData contains invalid content which cannot be decoded successfully.
這意味着我在字節38中,在dwChannelMask
40字節添加wValidBitsPerSample
和SubFormat
在字節44處。我應該爲這三個標題字段添加什麼信息?這些信息的含義是什麼?如何以8-16-32位整數的形式添加它們?
感謝您的幫助:)。
這裏是我的文件頭信息:
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