克隆音频对象

时间:2013-07-04 04:15:35

标签: javascript html5 audio

我知道如何克隆一个对象,但我想知道,如何克隆一个音频对象?我应该克隆它而不是克隆对象吗?

“说明”我的意思:

var audio = new Audio("file.mp3");
var audio2 = $.extend({}, audio); // Clones `audio`

这是正确的方法吗?

我之所以这样问的原因是我希望能够同时多次播放相同的声音。

2 个答案:

答案 0 :(得分:4)

我有与原先提出的完全相同的困境。以下对我来说非常有效:

var audio2 = audio.cloneNode();

答案 1 :(得分:0)

这个问题在javascript年代很古老。我认为您的代码正在(正在)再次下载音频,这是造成延迟的原因。如果您一次抓取音频文件并将其存储在blob中,则可以将该blob用作新音频事件的来源。

let fileBlob;
fetch("file.mp3")
    .then(function(response) {return response.blob()})
    .then(function(blob) {
        fileBlob=URL.createObjectURL(blob);
        new Audio(fileBlob); // forces a request for the blob
 });

 ...
 new Audio(fileBlob).play()  // fetches the audio file from the blob.

您也可以使用web audio api做很多事情,但是学习曲线会稍微陡一些。