我找到了this ,但它适用于无符号 24 位整数:
DataView.prototype.setUint24 = function(pos, val) {
this.setUint16(pos, val >> 8);
this.setUint8(pos+2, val & ~4294967040); // this "magic number" masks off the first 16 bits
}
简单地将 setUint16
更改为 setInt16
并将 setUint8
更改为 setInt8
似乎不起作用。我对低级二进制内容的了解非常有限,所以我需要一些帮助。我了解这个函数的大部分内容:
val >> 8
仅保留前 16 位以存储为 16 位pos + 2
是因为16位整数占用2个字节的空间- 至于
val & ~4294967040
,有一条评论哈哈。
我不太确定为什么仅更改对设置有符号值的方法的调用不起作用/我不太确定为什么设置有符号/无符号值时过程有所不同。
最佳答案
正如@Ryan 和@Thomas 所评论的,此方法有效。我认为它不起作用,因为我创建的 wav 文件是纯白噪声。事实证明,虽然此方法有效,但它可能以错误的顺序设置字节(这对于 wav 文件来说是有问题的,但对于其他处理则不然)。请参阅Is there anything special I have to do to create a 24-bit WAV file?了解更多信息。
关于javascript - 如何在 DataView 中设置有符号的 24 位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42216219/