可以从内存创建一个AudioBuffer,即Int8Array

时间:2013-02-12 20:58:53

标签: javascript html5 html5-audio web-audio

有没有办法将内存中的原始数据作为样本添加到Web Audio Api?我想添加一个Int8Array(或Int16Array)作为缓冲区,缓冲区只有样本,没有格式为WAV或MP3。我已经尝试过audioContext.createBuffer,但没有成功。

这样的事情:

var buffer = audioContext.createBuffer(1,8192, 22000);
var intArray = new Int8Array(....);
// -- fill intarray
buffer.buffer = intArray;
...
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination); 

如果不可能,是否有与contetx.decodeAudio()兼容的声音格式,这很容易在内存中“模拟”?即只是标题或其他东西。

1 个答案:

答案 0 :(得分:4)

它既不是非常直观,也不是在规范中明确记录,也不是很容易在网上找到:

但是,您只需修改Float32Array在任何缓冲区上返回的getChannelData(<idx of channel>)

不要忘记将样本缩放到范围[-1,1]

对于您的示例,您可以将intArray中的值缩放并复制到通过调用获得的floatArray:

floatArray = buffer.getChannelData(0)