如何在 WebAudioApi 中配置 MediaElementAudioSourceNode?
How do I dispose a MediaElementAudioSourceNode in WebAudioApi?
我正在使用 MediaElementAudioSourceNode
播放音频文件 (),它按预期工作,但我对如何在断开连接后处理节点有疑问。
目前我有这个代码:
//Do we have already an MediaElementSourceNode ?
if (this._sourceNode) {
console.warn("THERE IS AUDIO PLAYING!");
//this._audioContainer.addTextTrack
// disconnect and remove all references.
this._audioContainer.pause();
this._audioContainer = undefined;
this._sourceNode.disconnect();
this._sourceNode = undefined;
console.warn("The _audioContainer was paused and the _sourceNode disconnected");
}
this._audioContainer = new Audio(filePath);
this._audioContainer.oncanplaythrough = () => {
clearTimeout(securityTimeout);
console.log(this._audioContainer.readyState);
console.dir(this._audioContainer);
this.audioPlayerActive = true;
// MediaElementSource are ONE TIME ONLY use kind of Node
this._sourceNode = this._AudioContext.createMediaElementSource(this._audioContainer);
this._sourceNode.connect(this._EqNode);
this._audioContainer.play();
console.log("playAudioFile() END");
};
this._audioContainer.onended = () => {
console.log("__audioContainer.onended()");
this._audioContainer = undefined;
this._sourceNode.disconnect();
this._sourceNode = undefined;
};
使用 Web Audio inspector on firefox 我可以看到,每次我 运行 这段代码(点击按钮时)都会创建一个新的 MediaElementAudioSourceNode
断开之前创建的代码(如果检测到)。此外,当音频结束时,它会断开连接。但是几分钟后节点仍然存在:
我想防止内存泄漏。我该如何处置它们?
编辑:
没有可用的功能(我认为)
我正在使用 MediaElementAudioSourceNode
播放音频文件 (
目前我有这个代码:
//Do we have already an MediaElementSourceNode ?
if (this._sourceNode) {
console.warn("THERE IS AUDIO PLAYING!");
//this._audioContainer.addTextTrack
// disconnect and remove all references.
this._audioContainer.pause();
this._audioContainer = undefined;
this._sourceNode.disconnect();
this._sourceNode = undefined;
console.warn("The _audioContainer was paused and the _sourceNode disconnected");
}
this._audioContainer = new Audio(filePath);
this._audioContainer.oncanplaythrough = () => {
clearTimeout(securityTimeout);
console.log(this._audioContainer.readyState);
console.dir(this._audioContainer);
this.audioPlayerActive = true;
// MediaElementSource are ONE TIME ONLY use kind of Node
this._sourceNode = this._AudioContext.createMediaElementSource(this._audioContainer);
this._sourceNode.connect(this._EqNode);
this._audioContainer.play();
console.log("playAudioFile() END");
};
this._audioContainer.onended = () => {
console.log("__audioContainer.onended()");
this._audioContainer = undefined;
this._sourceNode.disconnect();
this._sourceNode = undefined;
};
使用 Web Audio inspector on firefox 我可以看到,每次我 运行 这段代码(点击按钮时)都会创建一个新的 MediaElementAudioSourceNode
断开之前创建的代码(如果检测到)。此外,当音频结束时,它会断开连接。但是几分钟后节点仍然存在:
我想防止内存泄漏。我该如何处置它们? 编辑: 没有可用的功能(我认为)