AudioBufferSourceNode: индекс или размер отрицателен или больше разрешенного количества - PullRequest
0 голосов
/ 16 марта 2020

Я следую учебнику по API WebAudio, но вместо узла усиления я хотел бы использовать 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 содержит этот скрипт и звуковую метку с пример аудио. Я также основал его на файлах из учебника, вы можете найти репо в Интернете здесь .

1 Ответ

0 голосов
/ 16 марта 2020

Ошибка, которую вы получаете, генерируется, потому что AudioBufferSourceNode имеет только выход. Он не принимает никаких входных данных. Это означает, что следующий псевдокод всегда выдаст ошибку.

someAudioNode.connect(anAudioBufferSourceNode);

AudioBufferSourceNode ожидает, что ему будет выдан AudioBuffer, который можно рассматривать как его ввод.

One Решением вашей проблемы было бы загрузить файл, который вы используете как src для AudioElement, расшифруйте его с помощью decodeAudioData(), а затем используйте полученный AudioBuffer с AudioBufferSourceNode.

Или вы вообще не могли бы использовать API Web Audio и вместо этого использовать свойство playbackRate AudioElement для регулировки скорости воспроизведения.

Недостаток первого решения - то, что вам нужно загрузить весь файл заранее. В отличие от этого второе решение менее точно. Например, невозможно автоматизировать playbackRate AudioElement, тогда как это можно сделать с playbackRate AudioBufferSourceNode.

...