2017-09-18 2 views
0

자바 스크립트에서 일부 원시 오디오 데이터를 생성 중이므로 생성하는 동안 재생해야합니다. 나는 이것을 여기에서 찾았고 내가 찾고있는 것에 가장 가까운 것은 this이다. 그러나 주어진 응답에서 데이터 요소 배열이 먼저 생성 된 다음 오디오가 재생됩니다. 나는 그것을 생성하는 동안 그것을 재생해야합니다. 기본적으로 나는 다른 데이터의 일부 스트림을 수신하고 처리하고이를 기반으로 오디오를 생성합니다. 내가받는 데이터에 해당하는 오디오를 재생해야합니다. (단순한 예가 오디오 볼륨과 주파수를 수신 중입니다.)재생중인 PCM을 재생하십시오.

답변

1

요청이 올바르게 전달되면 ScriptProcessorNode 만 있으면됩니다.
다음과 같은 방법으로 PCM 데이터로 공급됩니다

  • 대기의 onaudioprocess 이벤트.
  • AudioBuffer 인 이벤트에서 outputBuffer를 가져옵니다.
  • outputBuffer의 각 채널을 통해 루프 (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>

관련 문제