--- title: AnalyserNode slug: Web/API/AnalyserNode tags: - API - Web Audio API - 오디오 translation_of: Web/API/AnalyserNode ---
{{APIRef("Web Audio API")}}
AnalyserNode
는 시간대 별로 실시간 주파수의 정보를 표현합니다. {{domxref("AudioNode")}} 를 통해 오디오 스트림정보가 그대로 입력되어 출력이 되지만 이를 통해 당신은 새로운 형태의 데이터를 생성하거나, 가공하고 오디오를 시각화 시키는 작업을 할 수 있습니다.
AnalyzerNode
는 하나의 입력에 하나의 출력을 가집니다. 그리고 이 노드는 출력이 명시되지 않더라도 동작을 합니다.
Number of inputs | 1 |
---|---|
Number of outputs | 1 (but may be left unconnected) |
Channel count mode | "explicit" |
Channel count | 1 |
Channel interpretation | "speakers" |
Note: See the guide Visualizations with Web Audio API for more information on creating audio visualizations.
{{domxref("AudioNode")}} 를 부모로 가지는 프로퍼티.
getByteFrequencyData()를 사용하여 얻은 결과값이다.
getByteFrequencyData()를 사용하여 얻은 결과값이다.
{{domxref("AudioNode")}} 을 상속하는 메서드.
이 예제는 {{domxref("AudioContext")}} 를 사용해 AnalyserNode를 생성하여 사용하는 방법을 보여주고, {{domxref("window.requestAnimationFrame()","requestAnimationFrame")}} and {{htmlelement("canvas")}} 를 통해 반복적으로 시간기반(time-domain) 의 정보를 반복적으로 수집 및 "oscilloscope style" 를 통해 입력된 오디오 정보를 시각화하여 보여주는 예제입니다. 더 많은 정보와 예제는 Voice-change-O-matic demo (see app.js lines 128–205 for relevant code)를 확인 하세요.
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioCtx.createAnalyser();
// 새로운 AnalyserNode를 생성한다.
...
analyser.fftSize = 2048; // FFT의 크기를 2048로 한다.
var bufferLength = analyser.frequencyBinCount; // 시각화를 하기 위한 데이터의 갯수
var dataArray = new Uint8Array(bufferLength); // 데이터를 담을 bufferLength 크기의 Unit8Array의 배열을 생성
analyser.getByteTimeDomainData(dataArray); // 시간기반의 데이터를 Unit8Array배열로 전달
// 얻어진 데이터를 기반으로 시각화 작업을 한다. 캔버스를 이용한다.
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteTimeDomainData(dataArray);
canvasCtx.fillStyle = 'rgb(200, 200, 200)';
canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
canvasCtx.lineWidth = 2;
canvasCtx.strokeStyle = 'rgb(0, 0, 0)';
canvasCtx.beginPath();
var sliceWidth = WIDTH * 1.0 / bufferLength;
var x = 0;
for(var i = 0; i < bufferLength; i++) {
var v = dataArray[i] / 128.0;
var y = v * HEIGHT/2;
if(i === 0) {
canvasCtx.moveTo(x, y);
} else {
canvasCtx.lineTo(x, y);
}
x += sliceWidth;
}
canvasCtx.lineTo(canvas.width, canvas.height/2);
canvasCtx.stroke();
};
draw();
Specification | Status | Comment |
---|---|---|
{{SpecName('Web Audio API', '#the-analysernode-interface', 'AnalyserNode')}} | {{Spec2('Web Audio API')}} |
{{Compat("api.AnalyserNode")}}