通过webAudio API播放pcm数据

时间:2012-01-03 10:29:00

标签: html5 google-chrome javascript web-audio

您好我正在使用WebAudio API。我读了HTML5 Web Audio API, porting from javax.sound and getting distortion链接,但没有像java API那样获得优质。我从服务器获取带有签名字节的PCM数据。然后我必须将其改为16位格式。改变我正在使用(firstbyte<< 8 | secondbyte) 但我无法获得高质量的声音。转换或任何其他方式有什么问题可以获得高质量的声音吗?

1 个答案:

答案 0 :(得分:4)

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);