我有以下片段:
new Uint16Array( arraybuffer, 0, 18108 );
我知道arraybuffer
是ArrayBuffer的实例,arraybuffer.byteLength
是31984。由于缓冲区的字节级是> 18108,所以我希望这可以正常工作。相反,我得到以下错误:
chrome:
连击:无效的打字阵列长度
firefox:
TypeError:无效参数
是什么可能导致这种情况失败,或者如何检查我无法打开的阵列式扣子?
好吧,我误解了TypedArray/uint16array构造函数。第二个参数是 byteOffset
,但第三个参数是不是字节长度:它是元素中的长度。
来自TypedArray文档:
长度
使用长度参数调用时,将创建一个内部数组缓冲区,以记忆大小长度乘以Bytes_per_element字节,其中包含0个值。
由于 Uint16Array.BYTES_PER_ELEMENT
是2,所以阵列贝弗将至少需要2 * 18108
字节长,而不是。
我最近遇到了这个错误,所以我使用ffmpeg创建了wavfiles,所以我认为这是正确的格式。然后,您可以尝试使用python libsa或scipy打开并进行检查,我的问题是ffmpeg生成的wav文件,但mp3layer格式,我需要转换为pcm格式。