我在Float32Arrays中收到PCM音频样本。但我的应用程序只能支持16位长度的数据,所以我需要转换。
我不知道如何做到这一点,因为没有用于Float16Array的类型化数组,而且我从未使用过bit级别的数据。有人可以解释或说明如何做到这一点吗?
答案 0 :(得分:1)
Firstoff,JavaScript是动态类型的,没有类型长度/大小的概念。
运行时问题可以在本机平台上内部使用哪些类型大小,但这并不一定限制可能的值,即如果您愿意,则在JavaScript运行时环境中限制模拟类型长度。
此外,您可能需要16位int才能将其传递给音频设备。会更有意义。
所以,我会将你的问题缩小到:如何在JavaScript 中将float转换为int,答案就在这里: How do I convert a float number to a whole number in JavaScript?
但如果你真的想要转换价值的精确度: 你可以做的是乘以X,然后舍入(“转换为int”,见上面的链接),然后再次除以X.但这不像将一个大小的浮点数转换为另一个大小,因为你没有考虑实际内存中浮点数的mantisse / exponent表示。我的解决方案只能削减一些精度(如果你愿意,可以量化)。
无论如何,JavaScript不是处理类型的内存表示的平台;它已经足够混乱以处理float和int之间的区别;)