Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 克隆音频对象_Javascript_Html_Audio - Fatal编程技术网

Javascript 克隆音频对象

Javascript 克隆音频对象,javascript,html,audio,Javascript,Html,Audio,我知道如何克隆对象,但我想知道,如何克隆音频对象?我克隆它是否应该与克隆对象不同 为了“说明”我的意思: var audio = new Audio("file.mp3"); var audio2 = $.extend({}, audio); // Clones `audio` 这是正确的方法吗 我问这个问题的原因是我希望能够同时多次播放相同的声音。我遇到了与最初提出的完全相同的困境。以下几点对我来说非常有效: var audio2 = audio.cloneNode(); 这个问题已经有好

我知道如何克隆对象,但我想知道,如何克隆音频对象?我克隆它是否应该与克隆对象不同

为了“说明”我的意思:

var audio = new Audio("file.mp3");
var audio2 = $.extend({}, audio); // Clones `audio`
这是正确的方法吗


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

我遇到了与最初提出的完全相同的困境。以下几点对我来说非常有效:

var audio2 = audio.cloneNode();

这个问题已经有好几年的历史了。我认为你的代码正在再次下载音频,这就是你延迟的原因。如果抓取音频文件一次并将其存储在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.

您还可以使用做很多事情,但它的学习曲线稍陡一些。

var audio=new audio(“file.mp3”);var audio2=new Audio(“file.mp3”)
@Musa-right,但是有那么慢吗?我不知道,做一些基准测试看看。还有
var audio2=audio.cloneNode()
@MiJyn,如果你的意思是再次下载文件的速度很慢,那么就不要了。浏览器将从缓存中加载它。@Brad,好的,谢谢!这澄清了一个问题,似乎每次您调用它时浏览器都会发出一个新的请求(针对同一个文件)。