Javascript JS:加载时同时播放多个音频源
我有一个web项目(仅限于香草HTML/CSS/JS),有三个音频源。想法是让这三个文件同时播放,但我在手机上注意到文件播放不同步(即一个源开始播放,几毫秒后第二个源开始播放,然后第三个源开始播放)。我认为它们正在播放,因为加载后会立即播放单个文件,因此我希望在加载所有文件后,同时对所有三个文件调用play()方法 使用vanilla JS实现这一点的最佳方法是什么 例如: 回购: 蒂亚Javascript JS:加载时同时播放多个音频源,javascript,html,audio,Javascript,Html,Audio,我有一个web项目(仅限于香草HTML/CSS/JS),有三个音频源。想法是让这三个文件同时播放,但我在手机上注意到文件播放不同步(即一个源开始播放,几毫秒后第二个源开始播放,然后第三个源开始播放)。我认为它们正在播放,因为加载后会立即播放单个文件,因此我希望在加载所有文件后,同时对所有三个文件调用play()方法 使用vanilla JS实现这一点的最佳方法是什么 例如: 回购: 蒂亚 RichMediaElements用于媒体的正常播放,并且没有进行足够的优化以获得较低的延迟。最好是使用,和
RichMediaElements用于媒体的正常播放,并且没有进行足够的优化以获得较低的延迟。最好是使用,和 您将首先在内存中获取文件的数据,然后从中解码音频数据,一旦所有音频数据都被解码,您就可以安排在同一时刻播放所有音频数据:
(异步()=>{
常量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,谢谢!我会调查的,非常感谢你的指导和指导。