Не удалось создать "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.
Ответы
Ответ 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
отлично работает.