【发布时间】:2013-04-18 13:29:01
【问题描述】:
我在 stackoverflow.com a great example 上找到了它实际上适用于播放声音。 一切顺利,但我想知道 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?
【问题讨论】:
-
只是猜测...它在第一个字节中保存最低 8 位,然后在第二个字节中保存高 8 位(从 9 到 16)?这是正确的吗?那么dVal * 32676是什么意思呢?