我想同时播放多个音轨并同时播放,并且可以在播放时以编程方式启用或禁用音轨。启用/禁用浏览器中的同步音轨
我试图把多个音频流在一个mp4文件,然后设置一个跟踪的这样enabled属性:
mySong.audioTracks[n].enabled
但该技术目前只在IE和Safari supported。
这是可以用Web Audio API来完成的,它似乎有更好的浏览器支持吗?
我想同时播放多个音轨并同时播放,并且可以在播放时以编程方式启用或禁用音轨。启用/禁用浏览器中的同步音轨
我试图把多个音频流在一个mp4文件,然后设置一个跟踪的这样enabled属性:
mySong.audioTracks[n].enabled
但该技术目前只在IE和Safari supported。
这是可以用Web Audio API来完成的,它似乎有更好的浏览器支持吗?
如果您使用的是HTML5 Audio,则可以使用.play()
和.pause()
命令,详见MDN's guide。
比方说,您有一个包含5个HTML5音频元素的页面,每个HTML元素的类别为.song1
。如果你想停止,并在同一时间开始的所有曲目,你可以指定按钮来运行:
document.getElementsByClassName("song1").play();
和
document.getElementsByClassName("song1").pause();
如果您想静音的轨道而其他人继续播放,您可以设置它的体积为0编程太:
getElementsByTagName("audio")[0].volume=0; <!-- Mute track 1 -->
或
getElementsByTagName("audio")[2].volume=0; <!-- Mute track 3 etc -->
希望这有助于!
对于可能的WebAudio解决方案,假设您已将mp4文件解码为AudioBufferSource
,s
和n
通道。
然后:
var splitter = context.createSplitter(n);
s.connect(splitter);
for (k = 0; k < n; ++k) {
gains[k] = context.createGain();
spitter.connect(gains[k], k, 0);
gains[k].connect(context.destination);
}
// To disable channel m:
gains[m].gain.value = 0;
// To re-enable channel m:
gains[m].gain.value = 1;
您可以通过在以各信道衰落更大胆的尝试,并淡出了。
这种技术的问题在于不能保证曲目将开始并保持同步。 – Duvrai
我从来没有使用过这种方法,所以我不知道它的缺点。什么会导致音频不同步? – luc122c