我找到了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
的{{1}}和setInt16
的{{1}}似乎无效。我对低级二进制文件的了解非常有限,所以我需要一些帮助。我理解这个功能的大部分内容:
setUint8
仅保留前16位作为16位setInt8
是因为16位整数在空间方面占用2个字节val >> 8
,还有评论lol。我不太清楚为什么只更改对设置有符号值的方法的调用不起作用/我不太确定为什么在设置有符号/无符号值时进程不同。
答案 0 :(得分:1)
由@Ryan和@Thomas评论,此方法有效。我认为它不起作用,因为我创建的wav文件是纯白噪声。事实证明,虽然这种方法有效,但它可能是以错误的顺序设置字节(这对于wav文件是有问题的,但对于其他处理则不然)。有关详细信息,请参阅Is there anything special I have to do to create a 24-bit WAV file?。