可以从内存创建 AudioBuffer,即 Int8Array

Per*_*rty 3 html javascript html5-audio web-audio-api

有没有办法将内存中的原始数据作为样本添加到 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); 
Run Code Online (Sandbox Code Playgroud)

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

kr1*_*kr1 7

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

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

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

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

floatArray = buffer.getChannelData(0)
Run Code Online (Sandbox Code Playgroud)