Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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 JS:加载时同时播放多个音频源_Javascript_Html_Audio - Fatal编程技术网

Javascript JS:加载时同时播放多个音频源

Javascript JS:加载时同时播放多个音频源,javascript,html,audio,Javascript,Html,Audio,我有一个web项目(仅限于香草HTML/CSS/JS),有三个音频源。想法是让这三个文件同时播放,但我在手机上注意到文件播放不同步(即一个源开始播放,几毫秒后第二个源开始播放,然后第三个源开始播放)。我认为它们正在播放,因为加载后会立即播放单个文件,因此我希望在加载所有文件后,同时对所有三个文件调用play()方法 使用vanilla JS实现这一点的最佳方法是什么 例如: 回购: 蒂亚 RichMediaElements用于媒体的正常播放,并且没有进行足够的优化以获得较低的延迟。最好是使用,和

我有一个web项目(仅限于香草HTML/CSS/JS),有三个音频源。想法是让这三个文件同时播放,但我在手机上注意到文件播放不同步(即一个源开始播放,几毫秒后第二个源开始播放,然后第三个源开始播放)。我认为它们正在播放,因为加载后会立即播放单个文件,因此我希望在加载所有文件后,同时对所有三个文件调用play()方法

使用vanilla JS实现这一点的最佳方法是什么

例如:

回购:

蒂亚


Rich

MediaElements用于媒体的正常播放,并且没有进行足够的优化以获得较低的延迟。最好是使用,和

您将首先在内存中获取文件的数据,然后从中解码音频数据,一旦所有音频数据都被解码,您就可以安排在同一时刻播放所有音频数据:

(异步()=>{
常量URL=[“layer1\u big.mp3”、“layer2\u big.mp3”、“layer3\u big.mp3”]
.map((url)=>“https://cdn.jsdelivr.net/gh/jacksorjacksor/jacksorjacksor/soundblocks/audio/“+url);
//首先,获取文件的数据
const data_buffers=wait Promise.all(
map((url)=>fetch(url)。然后((res)=>res.arrayBuffer())
);
//获取我们的音频上下文
const context=new(window.AudioContext | | window.webkitAduioContext)();
//解码数据
const audio_buffers=等待承诺。全部(
data_buffers.map((buf)=>context.decodeAudioData(buf))
);
//要启用AudioContext,我们需要处理用户手势
const btn=document.querySelector(“按钮”);
btn.onclick=(evt)=>{
const current_time=context.currentTime;
音频缓冲区forEach((buf)=>{
//缓冲源是一个非常小的对象
//不要害怕创造和抛弃它
const source=context.createBufferSource();
//我们只连接解码后的数据,它不会被复制
source.buffer=buf;
//为了制造一些噪音
source.connect(context.destination);
//让它循环?
//source.loop=true;
//在我们开始后0.5秒启动它们,因此我们确定它们是同步的
源.启动(当前_时间+0.5);
} );
};
btn.disabled=false;
})();

play
Grand,谢谢!我会调查的,非常感谢你的指导和指导。