Подтвердить что ты не робот

Не удалось создать "AudioContext": количество аппаратных контекстов достигло максимума

Есть ли способ удалить AudioContext после его создания?

var analyzers = [];
var contexts = [];

try {
   for(var i = 0; i<20; i++) {
      contexts[i] = new AudioContext();
      analyzers[i] = contexts[i].createAnalyser();
   }
}catch(e) {
   console.log(e);
   // too many contexts created -- how do I remove them?
}

Я пробовал это, но это не позволяет мне создавать новые контексты после факта: analyzers.forEach(function(analyzer){analyzer.disconnect(analyzer.context.destination)})

Я использую Chrome 36 на Ubuntu Linux 14.04.

4b9b3361

Ответ 1

На странице должно быть только AudioContext.

Из документов: "В большинстве случаев для каждого документа используется только один аудиоконтекст".

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

Ответ 2

AudioContext.close() освободит аппаратное обеспечение контекста, но проверяет, что он доступен только для последних версий chrome и firefox. Недоступно для IE. Проверьте документацию: https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/close

Ответ 3

Ссылка на переменную i.e:
var myAudioCtx = new AudioContext();
Затем уничтожьте, позвонив myAudioCtx.close();
Что это.

Ответ 4

Я работал над виджетами медиа-плеера, которые в Chrome (но не в Firefox) пробились, как только на одной странице было встроено более пяти.

Я обнаружил, что вы можете создать один AudioContext и сохранить его по всему миру, а затем каждый экземпляр просто использовать общий AudioContext. Кажется, что все по-другому работает - вы можете присоединить несколько буферов и несколько пунктов назначения, а аудио все смешивается.

Это может потребовать больше усилий, если вы используете его для синхронизации, но для воспроизведения одного или нескольких аудиопотоков, сгенерированных "на лету" с JS-кодом, совместное использование одного AudioContext отлично работает.