2

有没有办法将内存中的原始数据作为样本添加到 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() 兼容的声音格式,它很容易在内存中“模拟”?即只是一个标题或其他东西。

4

1 回答 1

6

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

但是,您可以简单地修改任何缓冲区Float32Array返回的getChannelData(<idx of channel>)

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

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

floatArray = buffer.getChannelData(0)
于 2013-02-12T23:19:06.753 回答