6

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

为了“说明”我的意思:

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

这是正确的方法吗?

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

4

2 回答 2

6

我遇到了与最初提出的完全相同的困境。以下对我来说效果很好:

var audio2 = audio.cloneNode();
于 2013-12-18T14:00:03.320 回答
3

这个问题在 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.

您还可以使用网络音频 api做很多事情,但它的学习曲线稍微陡峭。

于 2019-06-22T01:26:59.340 回答