2017-09-18 13 views
0

生のオーディオデータをjavascriptで生成しています。生成する際に再生する必要があります。私はこれをここで検索し、私が探しているものに最も近いものはthisです。しかし、ここでの答えでは、データ点の配列が最初に生成され、次にオーディオが再生されます。私はそれを生成しながらそれを再生する必要があります。基本的には、他のデータのストリームを受信して​​処理し、それに基づいてオーディオを生成しています。受信しているデータに対応する音声を再生する必要があります。 (簡略化した例では、オーディオの音量と周波数が受信されています)。PCMを生成中に再生する

答えて

1

リクエストが正しく受信された場合、必要なのはScriptProcessorNodeです。
次の方法であなたのPCMデータとそれを養う:そのonaudioprocessイベントの

  • 待ち時間。
  • AudioBufferあるイベントからの出力バッファを取得します。
  • 出力バッファの各チャンネルをループ(Float32Arrayを戻します)。
  • outputBufferのチャネルデータのすべてのサンプルをループします。
  • 設定し、独自のデータ

function makeSomeNoise() { 
 
    var ctx = new AudioContext(); 
 
    var processor = ctx.createScriptProcessor(4096, 1, 1); 
 
    processor.onaudioprocess = function(evt) { 
 
    var outputBuffer = evt.outputBuffer; 
 
    // Loop through the output channels 
 
    for (var channel = 0; channel < outputBuffer.numberOfChannels; channel++) { 
 
     var outputData = outputBuffer.getChannelData(channel); 
 
     // Loop through the 4096 samples 
 
     for (var sample = 0; sample < outputBuffer.length; sample++) { 
 
     outputData[sample] = ((Math.random() * 2) - 1) * 0.5; 
 
     } 
 
    } 
 
    }; 
 
    processor.connect(ctx.destination); 
 
} 
 

 
btn.onclick = function() { 
 
    if (confirm("That won't be really nice")) 
 
    makeSomeNoise(); 
 
}
<button id="btn">make some noise</button>

関連する問題