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