我在 stackoverflow.com 上找到了一个很好的例子,它实际上适用于播放声音。一切顺利,但我想知道 PCM 生成中发生了什么。这是代码:
int idx = 0;
for (final double dVal : sample) {
final short val = (short) ((dVal * 32767));
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
其中 sample 是一个双精度数组,其中包含在这种情况下使用所有必需参数(频率、赫兹等)计算的正弦值,并且 generatedSnd 是一个字节数组。我所知道的只是 val & 0xff 将一个 int 转换为一个字节,但这里究竟做了什么?为什么会有移位>>> 8?