9

嗨,我正在研究 WebAudio API。我阅读了HTML5 Web Audio API,从 javax.sound 移植并获得了失真链接,但没有像在 java API 中那样获得良好的质量。我正在从服务器以有符号字节获取 PCM 数据。然后我必须把它改成 16 位格式。为了改变我正在使用(firstbyte<<8 | secondbyte),但我无法获得良好的音质。转换或任何其他方式以获得良好的声音质量有什么问题吗?

4

1 回答 1

5

Web Audio API 使用从 -1 到 1 的 32 位签名浮点数,所以这就是我要(希望)向您展示如何做的,而不是您在问题中提到的 16 位。

假设您的样本数组被调用samples并存储为从-128 到 127 的 2 的补码,我认为这应该可行:

var floats = new Float32Array(samples.length);
samples.forEach(function( sample, i ) {
  floats[i] = sample < 0 ? sample / 0x80 : sample / 0x7F;
});

然后你可以做这样的事情:

var ac = new webkitAudioContext()
  , ab = ac.createBuffer(1, floats.length, ac.sampleRate)
  , bs = ac.createBufferSource();
ab.getChannelData(0).set(floats);
bs.buffer = ab;
bs.connect(ac.destination);
bs.start(0);
于 2013-07-26T18:17:59.050 回答