首页 > 解决方案 > AudioBufferSourceNode:索引或大小为负数或大于允许的量

问题描述

我正在关注有关 WebAudio API的教程,但我想使用一个AudioBufferSourceNode(来调整播放速率)而不是增益节点。

但是将轨道连接到会AudioBufferSourceNode引发错误消息并抱怨:

IndexSizeError: Index or size is negative or greater than the allowed amount

这是我的代码:

const audioContext = new AudioContext();
const audioElement = document.querySelector('audio');
const track = audioContext.createMediaElementSource(audioElement);
const bufferNode = new AudioBufferSourceNode(audioContext, { playbackRate: 0.9 });

track.connect(bufferNode).connect(audioContext.destination);

HTML 包含此脚本和带有示例音频的音频标签。我也基于教程中的文件,您可以在此处在线找到它们的存储库。

标签: javascriptweb-audio-api

解决方案


你得到的错误被抛出,因为 anAudioBufferSourceNode只有一个输出。它不接受任何输入。这意味着下面的伪代码总是会抛出错误。

someAudioNode.connect(anAudioBufferSourceNode);

AnAudioBufferSourceNode期望得到一个AudioBuffer可以被认为是它的输入的。

解决您的问题的一种方法是加载您预先使用的文件srcAudioElement对其进行解码,decodeAudioData()然后将结果AudioBufferAudioBufferSourceNode.

或者您根本无法使用 Web Audio API,而是使用playbackRateAudioElement 的属性来调整播放速率。

第一个解决方案的缺点是您需要预先下载整个文件。与此相反,第二种解决方案不太准确。例如,不可能自动化playbackRateof ,AudioElement而可以使用playbackRateof来完成AudioBufferSourceNode


推荐阅读