【问题标题】:How do I dispose a MediaElementAudioSourceNode in WebAudioApi?如何在 WebAudioApi 中配置 MediaElementAudioSourceNode?
【发布时间】:2018-01-26 15:50:45
【问题描述】:

我正在使用MediaElementAudioSourceNode 播放音频文件 (refer to this question),它按预期工作,但我对断开连接后如何处理节点存有疑问。

目前我有这个代码:

//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。此外,当音频结束时,它会断开它。但是即使几分钟后节点仍然存在:

我想防止内存泄漏。我该如何处置它们? 编辑: 没有可用的功能(我认为)

【问题讨论】:

    标签: javascript web-audio-api


    【解决方案1】:

    目前没有任何方法可以做到这一点:https://github.com/WebAudio/web-audio-api/issues/1202

    【讨论】:

    • 但是垃圾收集器最终会处理掉它们吗?有没有办法用另一个 Audio() 元素重用它们?还是应该只更改创建的Audio() 元素的src
    • 如果目的只是为了播放音频文件,那么我认为更改src 是一种不错的方式。
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2016-08-16
    • 2017-04-27
    • 2020-10-31
    • 2017-10-31
    • 2012-01-03
    • 2014-11-30
    相关资源
    最近更新 更多