javascript - 如何同时启动多个音频标签?

标签 javascript html5-audio

我想一起播放一首歌曲的多个轨道,并且能够将其中一些轨道静音并播放其他轨道。所以我需要能够同时启动它们。现在,它们都开始有点不同步:

// Start playing
for ( i = 0; i < 5; i++ ) {
    tracks[i].audio.play();
}

即使这样显然也不够快,无法同时启动它们。

在 javascript 中有什么方法可以保证 HTML5 音频标签将同时开始播放吗?

最佳答案

不确定您是否已经这样做了,但这里有一些用于预加载音频的示例代码。

var audios = [];
var loading = 0;
AddNote("2C");
AddNote("2E");
AddNote("2G");
AddNote("3C");

function AddNote(name) {
    loading++;
    var audio = document.createElement("audio");
    audio.loop = true;
    audio.addEventListener("canplaythrough", function () {
        loading--;
        if (loading == 0) // All files are preloaded
            StartPlayingAll();
        }, false);
    audio.src = "piano/" + name + ".mp3";
    audios.push(audio);
}

function StartPlayingAll() {
    for (var i = 0; i < audios.length; i++)
        audios[i].play();
    }
}

您可以尝试的另一件事是在每个轨道上设置 audio.currentTime 以手动同步音频。

关于javascript - 如何同时启动多个音频标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377237/

相关文章:

JavaScript undefined variable

javascript - 错误 : Cannot find module '@discordjs/opus'

javascript - 如何查找列表项的索引(ul-li)?

javascript - 如何使用JavaScript在自定义html5音频播放器中计算剩余时间?

javascript - 为什么上传明显成功时上传的音频会损坏?

javascript音频加载不让它暂停

控制 html5 音量的 jquery slider

javascript - 函数中未定义或空变量

javascript - 是否可以在用户不与网络交互的情况下播放音频?我该怎么做呢?

javascript - 如何将 Angular 代码与 spring boot 集成?如何从 Controller 调用 Angular 特定页面?