【问题标题】:Convert Float32Array to 16 bit float Array Buffer JavaScript将 Float32Array 转换为 16 位浮点数组缓冲区 JavaScript
【发布时间】:2014-01-04 19:15:40
【问题描述】:

我在 Float32Arrays 中获取 PCM 音频样本。但是我的应用程序只能支持 16 位长度的数据,所以我需要转换。

我不知道该怎么做,因为 Float16Array 没有类型化数组,而且我从来没有处理过位级别的数据。有人可以解释或展示如何做到这一点吗?

【问题讨论】:

  • 确定您想要 16 位 float 值吗? 16 位浮点格式当然是可能的,但它很不寻常。

标签: javascript audio floating-point 16-bit


【解决方案1】:

首先,JavaScript 是动态类型的,没有类型长度/大小的概念。

在本机平台内部可以使用何种类型大小是运行时的问题,但这并不一定会限制可能的值,即在 JavaScript 运行时环境中模拟的类型长度。

另外,您可能需要 16 位 int 才能将其传递给音频设备。会更有意义。

所以,我会将您的问题缩小到:如何在 JavaScript 中将 float 转换为 int 答案就在这里: How do I convert a float number to a whole number in JavaScript?

但是如果你真的想转换你的值的精度:你可以做的是乘以 X,然后四舍五入(“转换为 int”,请参阅上面的链接),然后再除以 X。但是,这不像将一个大小的浮点数转换为另一个大小,因为您没有考虑实际内存中浮点数的尾数/指数表示。我的解决方案只会降低一些精度(如果你愿意,可以量化)。

无论如何,JavaScript 不是一个处理类型的内存表示的平台。处理 float 和 int 之间的差异已经够混乱了;)

【讨论】:

  • 我遍历 Float32Arrays,乘以 0xFFFF 并将值存储在新的 Int16Arrays 中。最终像魅力一样工作。谢谢
猜你喜欢
  • 2020-04-26
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多