2017-08-04 5 views
0

私は、オーディオの再生が開始および停止するアプリケーションがあり、ゲインを0またはゼロ以外の値にランプするUIコントロールがあります。私はAudioBufferSourceNode.startを使って再生をスケジューリングし、AudioParam.linearRampToValueAtTimeを使ってゲインを変調しています。将来、再生がスケジュールされることがあります。私が抱えている問題は、ランプ機能は再生が現在行われているときにのみ値を設定するように見えるということです。ゲイン値を設定しようとすると、スケジュールされた再生と再生開始との間に、新しい値が失われる。私は、タイミングチェックの束を行うことができますか、ランプのいずれか、または再生が起こっているかどうかに応じて直接ゲインを設定するが、これは厄介になることができますが、私は再生の開始とは独立して動作する別の方法があった停止する。再生が停止して開始している間に、WebAudioゲインをランプアップしますか?

ここではテストケースです:1秒間のノイズバッファを作成して再生し、ゲインをゼロにします。ランプが終了した後(1秒間)再生がスケジュールされている場合、ゲイン値は決して設定されず、デフォルトのゼロ以外の値のままです。

var ctx = new AudioContext(); 
var SR = ctx.sampleRate; 
var buffer = ctx.createBuffer(1, SR, SR); 
var channelData = buffer.getChannelData(0); 
for (var i=0; i<SR; i++) { 
    channelData[i] = Math.random() * 2 - 1; 
} 
var bufferNode = ctx.createBufferSource(); 
var gainNode = ctx.createGain(); 
bufferNode.buffer = buffer; 
bufferNode.connect(gainNode); 
gainNode.connect(ctx.destination); 
gainNode.gain.linearRampToValueAtTime(0, ctx.currentTime + 1); 
//XXX if start_delay is greater than 1 (the ramp duration), 
// the gain is never changed and remains at 1. 
var start_delay = 0; 
bufferNode.start(ctx.currentTime + start_delay); 

答えて

0

ここでの問題のカップル:

  1. linearRampToValueAtTimeの行動先行オートメーションイベントなしはもともとよく指定されていませんでした。これはWebAudio仕様で修正されています。これに関するさまざまなブラウザの状態を知らないが、私はChromeが正しくこれを行うと思う。
  2. ゲインノードの自動化は、期待通りに機能するはずです。ブラウザベンダーに対してバグを報告しない場合
関連する問題