AnalyserNode
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015ë 7ì.
AnalyserNode ì¸í°íì´ì¤ë ì¤ìê° ì£¼íìì ìê° ìì ë¶ì ì 보를 ì ê³µ ê°ë¥í ë
¸ë를 ííí©ëë¤. ì´ê²ì ë³ê²½ëì§ ìì ì¤ëì¤ ì¤í¸ë¦¼ì ì
ë ¥ìì ì¶ë ¥ì¼ë¡ ì ë¬íì§ë§, ì¬ë¬ë¶ì ìì±ë ë°ì´í°ë¥¼ ì»ê³ , ê·¸ê²ì ì²ë¦¬íê³ , ì¤ëì¤ ìê°í를 ìì±í ì ììµëë¤.
AnalyserNodeë ì íí íëì ì
ë ¥ê³¼ íëì ì¶ë ¥ì ê°ì§ëë¤. ì´ ë
¸ëë ì¶ë ¥ì´ ì°ê²°ëì§ ììëë¼ë ìëí©ëë¤.
| ì ë ¥ì ì | 1 |
|---|---|
| ì¶ë ¥ì ì | 1 (ê·¸ë¬ë ì°ê²°ëì§ ìì ì±ë¡ ë¨ìììì§ë 모ë¦
ëë¤) |
| Channel count mode | "max" |
| Channel count | 2 |
| Channel interpretation | "speakers" |
ìì
ì´ ì¸í°íì´ì¤ë ë¤ìì ë¶ëª¨ ì¸í°íì´ì¤ë¤ë¡ë¶í° ììë°ìµëë¤:
ìì±ì
AnalyserNode()-
AnalyserNodeê°ì²´ì ìë¡ì´ ì¸ì¤í´ì¤ë¥¼ ìì±í©ëë¤.
ìì±
ë¶ëª¨ì¸ AudioNodeë¡ë¶í° ìì±ì ììë°ìµëë¤.
AnalyserNode.fftSize-
주íì ììì ê²°ì íë ë° ì¬ì©ë FFT(Fast Fourier Transform)ì ì¬ì´ì¦ë¥¼ ëíë´ë unsigned long ê°ì ëë¤.
AnalyserNode.frequencyBinCountì½ê¸° ì ì©-
FFT ì¬ì´ì¦ ê°ì ì ë°ì¸ unsigned long ê°ì ëë¤. ì´ê²ì ì¼ë°ì ì¼ë¡ ìê°í를 ìí´ ì¬ì©í ë°ì´í° ê°ì ìì ëì¼ìë©ëë¤.
AnalyserNode.minDecibels-
unsigned byte ê°ì¼ë¡ì ì íì ëí´ì, FFT ë¶ì ë°ì´í°ì ì¤ì¼ì¼ë§ ë²ìììì ìµì power ê°ì ëíë´ë double ê°ì ëë¤ â 기본ì ì¼ë¡, ì´ê²ì
getByteFrequencyData()를 ì¬ì©í ë ê²°ê³¼ì ë²ìì ëí ìµì ê°ì ëª ìí©ëë¤. AnalyserNode.maxDecibels-
unsigned byte ê°ì¼ë¡ì ì íì ëí´ì, FFT ë¶ì ë°ì´í°ì ì¤ì¼ì¼ë§ ë²ìììì ìµë power ê°ì ëíë´ë double ê°ì ëë¤ â 기본ì ì¼ë¡, ì´ê²ì
getByteFrequencyData()를 ì¬ì©í ë ê²°ê³¼ì ë²ìì ëí ìµë ê°ì ëª ìí©ëë¤. AnalyserNode.smoothingTimeConstant-
ë§ì§ë§ ë¶ì íë ìì ìë²ë¦¬ì§(averaging) ìì를 ëíë´ë double ê°ì ëë¤ â 기본ì ì¼ë¡, ì´ê²ì ìê°ì ëí ê° ì¬ì´ì ì íì ë 매ëë½ê² ë§ëëë¤.
ë©ìë
ë¶ëª¨ì¸ AudioNodeë¡ë¶í° ë©ìë를 ììë°ìµëë¤.
AnalyserNode.getFloatFrequencyData()-
ì ë¬ë
Float32Arrayë°°ì´ ë´ë¡ íì¬ ì£¼íì ë°ì´í°ë¥¼ ë³µì¬í©ëë¤. AnalyserNode.getByteFrequencyData()-
ì ë¬ë
Uint8Array(unsiged byte array) ë´ë¡ íì¬ ì£¼íì ë°ì´í°ë¥¼ ë³µì¬í©ëë¤. AnalyserNode.getFloatTimeDomainData()-
ì ë¬ë
Float32Arrayë°°ì´ ë´ë¡ íì¬ íí, ì¦ ìê° ìì ë°ì´í°ë¥¼ ë³µì¬í©ëë¤. AnalyserNode.getByteTimeDomainData()-
ì ë¬ë
Uint8Array(unsigned byte array) ë´ë¡ íì¬ íí, ì¦ ìê° ìì ë°ì´í°ë¥¼ ë³µì¬í©ëë¤.
ìì
ì°¸ê³ : ì¤ëì¤ ìê°í ìì±í기ì ëí ë ë§ì ì 보를 ë³´ë ¤ë©´ Web Audio API ìê°í ê°ì´ë를 ì°¸ê³ íì¸ì.
기본 ì¬ì©
ë¤ìì ìì ë AnalyserNode를 ìì±í기 ìí AudioContextì ê·¸ë¦¬ê³ ëì ë°ë³µì ì¼ë¡ ìê° ììì ë°ì´í°ë¥¼ ìì§íê³ íì¬ ì¤ëì¤ ì
ë ¥ì "ì¤ì¤ë¡ì¤ì½í ì¤íì¼ì" ì¶ë ¥ì 그리기 ìí requestAnimationFrameê³¼ <canvas>ì 기본 ì¬ì©ì ë³´ì¬ì¤ëë¤. ë ìë²½í ìì© ìì /ì 보를 ë³´ë ¤ë©´ Voice-change-O-matic ë°ëª¨ë¥¼ íì¸íì¸ì (ê´ë ¨ë ì½ë를 ë³´ë ¤ë©´ app.js ë¼ì¸ 128â205를 ì°¸ê³ íì¸ì).
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
// ...
var analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);
// ë¶ìë ìì¤ì ì°ê²°í©ëë¤
source.connect(analyser);
// ID "oscilloscope"ë¡ ì ìë canvas를 ì»ìµëë¤
var canvas = document.getElementById("oscilloscope");
var canvasCtx = canvas.getContext("2d");
// íì¬ ì¤ëì¤ ìì¤ì ì¤ì¤ë¡ì¤ì½í를 그립ëë¤
function draw() {
requestAnimationFrame(draw);
analyser.getByteTimeDomainData(dataArray);
canvasCtx.fillStyle = "rgb(200, 200, 200)";
canvasCtx.fillRect(0, 0, canvas.width, canvas.height);
canvasCtx.lineWidth = 2;
canvasCtx.strokeStyle = "rgb(0, 0, 0)";
canvasCtx.beginPath();
var sliceWidth = (canvas.width * 1.0) / bufferLength;
var x = 0;
for (var i = 0; i < bufferLength; i++) {
var v = dataArray[i] / 128.0;
var y = (v * canvas.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 |
|---|
| Web Audio API > # AnalyserNode > |