在Safari和Edge中,audioContext.copyToChannel()的替代方案

7

Safari和Edge都不支持使用audioContext.copyToChannel()函数来填充自定义内容的音频缓冲区。有其他方法可以做到吗?

在我的情况下,我想创建一个脉冲响应,将缓冲区填充该响应并将某些声音与该缓冲区卷积。对于Chrome和Firefox,这样做是可行的:

buffer = audioCtx.createBuffer(numOfChannels, 1, sampleRate);
buffer.copyToChannel(impulseResponse, 0);
buffer.copyToChannel(impulseResponse, 1);
convolverNode.buffer = buffer;

1
为了帮助节省一些人的时间,需要注意的是,在撰写本评论时,copyToChannel()copyFromChannel()在iOS上不受支持。您可以使用TypedArray.set(),但我发现这非常慢。 - V. Rubinetti
仍不支持Safari。 - Jyaif
为什么 caniuse.com 和 mdn 在 Safari 上都宣称“完全”支持,而实际上并不支持呢? - sertal70
2个回答

7
你可以在 AudioBuffer 上使用 getChannelData(channel) 方法,然后你将得到一个普通的Float32Array 数组,你可以随意修改它。也许你想看看set方法?copyToChannel 用于优化缓冲区复制,如规范中所指出的(请参见下面的小绿框)。

正是我所需要的。谢谢。 - fhchl

0

Edge现在支持copyToChannel(已在Edge 38.14393.0.0上测试)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接