javascript - Web音频API:同时启动多个MediaElementAudioSourceNode

标签 javascript api audio web

我正在尝试使用Web Audio API创建多轨音频播放器。目前,我的播放按钮单击是按以下方式处理的...

function playProject(){
    var p = $(".play-button");
    p.hide();
    p.siblings('.pause-button').show();
    for( var i=0 ; i<audio.length ; i++ ){
        audio[i].play();
    }
}

我的网络音频设置看起来像这样...
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();

var audio = [];
var channelVolume = [];
var vol = audioCtx.createGain();

$(document).ready(function(){
var obj = JSON.parse('<?php echo $json ?>');

var audioPath = "../wp-content/themes/blankslate-child/projects/"+"<?php echo     $data->name ?>"+"/";

var sources = [];
var merger = audioCtx.createChannelMerger(2);

for(var i = 0; i<obj.length;i++){
    audio.push(new Audio());
    audio[i].src = audioPath+obj[i].name;
    audio[i].loop = true;
    sources.push(audioCtx.createMediaElementSource(audio[i]));
    channelVolume.push(audioCtx.createGain())
    sources[i].connect(channelVolume[i]);
    channelVolume[i].connect(merger,0,0);
}

merger.connect(vol);
vol.connect(audioCtx.destination);

})

本质上,我循环浏览所有音频元素并进行播放。虽然这样做有效,但我认为这可能不是最干净的方法。是否可以通过单个函数调用同时播放所有音频源?

最佳答案

这是不可能的,MediaElementAudioSourceNode没有时序保证。

在某些情况下,它可能现在可以在某些浏览器(例如Firefox)上运行,因为我们在内部设计事物的方式为您带来了这种同步,但是它可能会从发行版更改为下一个版本,因此我不必依赖它。

关于javascript - Web音频API:同时启动多个MediaElementAudioSourceNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712261/

相关文章:

c# - 通过ASP.NET页面进行音频对话!

c# - 将简单的 C# 方法转换为 jquery

javascript - JQuery获取输入值

javascript - 在悬停时替换元素的文本 jQuery JS

Xcode 天气应用

api - 使用附加用户 API key 在服务堆栈中实现仅应用程序 API key 和 secret

c# - 序列化异常 : unexpected character '<'

swift - AudioKit AK3DPanner 不工作

audio - 如何使用 ffmpeg 将所有音频流(在视频文件中)合并到一个音频 channel 中?

javascript - 在对象数组中,如何更新(而不仅仅是查找)属性 X 等于 Y 的对象?