Как освободить память с помощью API Web Audio?

var context = new window.AudioContext()
var request = cc.loader.getXMLHttpRequest();
request.open("GET", 'res/raw-assets/resources/audio/bgm.mp3', true);
request.responseType = "arraybuffer";
request.onload = function () {
 context["decodeAudioData"](request.response, function(buffer){
  //success
  cc.log('success')
  window.buffer = buffer
  playBgm()
 }, function(){
  //error
 });
};
request.onerror = function(){
 //error
};
request.send();

function playBgm(){
 var audio = context["createBufferSource"]();
 audio.buffer = buffer;
 var _volume = context['createGain']();
 _volume['gain'].value = 1;
 _volume['connect'](context['destination']);
 audio["connect"](_volume);
 audio.start(0)
}

в моем коде я загружаю mp3-файл и декодирую его в AudioBuffer(window.buffer), а затем воспроизводю его успешно

но это стоило много памяти около 100МБ Как освободить их? Я пытался так

audio.stop()
audio = null
window.buffer = null
//context.close()
//context = null

просмотр памяти Chrome

в представлении памяти Chrome

иногда освобождение памяти примерно за 10 секунд

иногда выпускают в течение 1 минуты

иногда кажется, никогда не выпускают

Я хочу знать, является ли мой код правильным способом освобождения аудиобуфера?

Нужно ли закрывать AudioContext?

0 ответов

Другие вопросы по тегам