2016-09-26 15 views
0

Web Audio APIを使用してマルチトラックオーディオプレーヤーを作成しようとしています。現在、私のプレイボタンのクリックがこのように扱われる...Web Audio 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); 

}) 

基本的にIループ私のオーディオ要素の全てを通って、それらを再生。これが機能する間、私はそれがそれを行う最もクリーンな方法ではないかもしれないと感じます。単一の関数呼び出しですべてのオーディオソースを同時に再生する方法はありますか?

+0

これはあなたの質問には答えませんが、JavaScriptへのデータのエコーについては注意が必要です。あなたがしなければならないことは、 'json_encode()'を使ってデータをスクリプトで使用するために安全にすることです。また、JSONを正しくJSに直接エコーした場合、JSでは 'JSON.parse()'は必要ありません。 – Brad

+0

私はjsonエンコードを使って$ json変数@Brad – Yawnolly

+0

を作成しましたが、あなたの 'audioPath'にはそれがありません。また、 'JSON.parse()'は必要ありません... JSONでエンコードされたオブジェクトを直接スクリプトにエコーすることができます。 – Brad

答えて

0

これはできません。MediaElementAudioSourceNodeにはタイミングの保証はありません。

私たちが内部的に設計した方法ではこの同期が得られますが、リリースから次のものに変更される可能性があるため、Firefoxのようないくつかのブラウザではうまくいく可能性がありますその上に。

関連する問題