通过webAudio API播放pcm数据

use*_*554 7 javascript html5 google-chrome web-audio-api

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

Kev*_*nis 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;
});
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)