通过webAudio播放pcm数据API
问题描述:
嗨,我正在使用WebAudio API。我读了HTML5 Web Audio API, porting from javax.sound and getting distortion链接,但没有得到良好的Java API.I正在从服务器获取PCM数据签名字节。然后我必须将其更改为16位格式。我正在使用(首字节< < 8 | secondbyte) 但我无法获得高质量的声音。在转换或其他任何方式来获得高质量的声音方面是否存在问题?通过webAudio播放pcm数据API
答
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
代码片段总是有帮助的。 – ebidel 2012-01-03 16:58:58
任何人都可以告诉我如何将有符号字节数组转换为Float32Array? – user894554 2012-01-04 09:28:38
不要太高傲,因为官方文档跳过了播放PCM部分(这将是直接功能),并且专注于decodeAudioData(),这更像是一个'帮手',这是一个很好的问题。 – 2013-01-20 20:04:27