javascript - 在 JavaScript 中将两个字节转换为有符号 16 位整数

标签 javascript audio byte pcm

在 JavaScript 中,我需要将两个字节转换为 16 位整数,以便可以将音频数据流转换为带符号的 PCM 值数组。

大多数将字节转换为 16 位整数的在线答案都使用以下内容,但它对于负数无法正常工作。

var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF));

最佳答案

您需要考虑负数以 2 的补码表示,并且 JavaScript 使用 32 位整数来执行按位运算。因此,如果是负值,则需要将数字的前 16 位补为 1。所以,这里有一个解决方案:

var sign = byteA & (1 << 7);
var x = (((byteA & 0xFF) << 8) | (byteB & 0xFF));
if (sign) {
   result = 0xFFFF0000 | x;  // fill in most significant bits with 1's
}

关于javascript - 在 JavaScript 中将两个字节转换为有符号 16 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298412/

相关文章:

java - 创建一种通过网络发送整数的有效方法。传输控制协议(protocol)

javascript - React Native 中的 `fetch` 未从 URL 返回预期数据

c - 无需系统调用或 C 中的库函数即可从内存中逐字节读取

javascript - 在 JavaScript 中使用 forEach 将数组的所有元素乘以数字

c# - 从麦克风实时播放音频。 C#

python - Pygame不会抛出任何错误,但是不会播放任何音频

android - Android:RTSP音频流问题

java - java中异或有符号字节

javascript - 如何强制使用当前脚本?

javascript - 使用 Prototypejs 插入innerHTML