将Float32Array转换为16位浮点数Array Buffer JavaScript

5

我得到的是Float32Arrays格式的PCM音频样本。但我的应用程序只支持长度为16位的数据,所以我需要进行转换。

由于没有适用于Float16Array的类型化数组,而且我从未在位级别处理过数据,因此我不知道该如何做。是否有人能够解释或展示一下如何完成这个过程?


请查看JavaScript类型化数组 - Givi
你确定需要16位的浮点数值吗?虽然16位的浮点格式是可行的,但它相当不常见。 - Pointy
1个回答

0
首先,JavaScript是动态类型语言,没有类型长度/大小的概念。
在本地平台上,运行时会使用哪些类型大小是由运行时决定的,但这并不一定限制了可能的值,即在JavaScript运行时环境内模拟的类型长度。
此外,可能需要16位整数才能将其传递到音频设备中。这更有意义。
因此,我会把你的问题缩小到:如何在JavaScript中将浮点数转换为整数,答案在这里:How do I convert a float number to a whole number in JavaScript? 但如果你真的想转换你的值的精度:你可以乘以X,然后四舍五入("转换为整数",见上面的链接),然后再除以X。但这不像将一个大小的浮点数转换为另一个大小,因为你没有考虑实际内存中浮点数的尾数/指数表示。我的解决方案只是削减了一些精度(量化,如果你愿意)。
无论如何,JavaScript不是一个处理类型的内存表示的平台;它已经足够混乱了,以处理浮点数和整数之间的差异 ;)

2
我遍历了Float32Arrays,乘以0xFFFF并将值存储在新的Int16Arrays中。最终运行良好。谢谢! - Conor Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接