"RangeError: Invalid typed array length"看似有效的输入



我有以下片段:

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格式。

相关内容

  • 没有找到相关文章