2012-01-03 188 views
7

嗨,我正在使用WebAudio API。我读了HTML5 Web Audio API, porting from javax.sound and getting distortion链接,但没有得到良好的Java API.I正在从服务器获取PCM数据签名字节。然后我必须将其更改为16位格式。我正在使用(首字节< < 8 | secondbyte) 但我无法获得高质量的声音。在转换或其他任何方式来获得高质量的声音方面是否存在问题?通过webAudio播放pcm数据API

+1

代码片段总是有帮助的。 – ebidel 2012-01-03 16:58:58

+0

任何人都可以告诉我如何将有符号字节数组转换为Float32Array? – user894554 2012-01-04 09:28:38

+0

不要太高傲,因为官方文档跳过了播放PCM部分(这将是直接功能),并且专注于decodeAudioData(),这更像是一个'帮手',这是一个很好的问题。 – 2013-01-20 20:04:27

回答

4

Web Audio API使用从-1到1的32位有符号浮点数,所以这就是我要(希望)告诉你如何去做的,而不是你在问题中提到的16位。

假设你的样品阵列被称为samples并存储为2的从-128到127的恭维,我想这应该工作:

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

我想你错过了“bs.buffer = ab;” – CpnCrunch 2013-10-28 22:54:40