2016-09-26 11 views
0

我正在嘗試使用Web Audio API創建多軌音頻播放器。目前我的播放按鈕的點擊也被類似處理...Web音頻API:同時啓動多個MediaElementAudioSourceNode

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); 

}) 

基本上我遍歷所有我的音樂元素,併發揮他們。雖然這有效,但我覺得它可能不是最乾淨的方法。有什麼方法可以在單個函數調用的同時播放所有音頻源?

+0

這並不回答你的問題,但你應該注意將數據回傳到JavaScript中。你應該做的是使用'json_encode()'使你的數據在腳本中安全使用。另外,如果您直接將JSON正確回顯到JS中,則不需要JS中的'JSON.parse()'。 – Brad

+0

我確實使用了json編碼來創建$ json變量@Brad – Yawnolly

+0

正確,但是您在'audioPath'中丟失了它。另外,您不需要'JSON.parse()'...您可以直接將JSON編碼的對象回顯到腳本中。 – Brad

回答

0

這是不可能的,MediaElementAudioSourceNode沒有時間保證。

它可能在某些瀏覽器上工作,例如Firefox,在某些情況下,現在,因爲我們在內部設計事物的方式爲您帶來了這種同步,但它可能會從一個版本更改爲另一個,所以我不會依賴在上面。