AnalyserNode
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
AnalyserNode ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ãªã¢ã«ã¿ã¤ã æéé å/卿³¢æ°é ååææ
å ±ã表ç¾ãã¾ãã AudioNode ã¯ãå
¥åããåºåã®æµãã«ããã¦é³å£°ã¹ããªã¼ã ãã®ãã®ã¯å¤ããããã¼ã¿å å·¥ãé³å£°ã®å¯è¦åããããã¨ãã§ãã¾ãã
1 ã¤ã® AnalyserNode ã¯å¿
ã 1 ã¤ã®å
¥åã¨åºåãæã¡ã¾ããåºåå
ããªãã¦ããã®ãã¼ãã¯åé¡ããã¾ããã
| å ¥åã®æ° | 1 |
|---|---|
| åºåã®æ° | 1 ï¼ãã ãæªæ¥ç¶ã®ã¾ã¾ã«ãªãï¼ |
| ãã£ã³ãã«æ°ã¢ã¼ã | "max" |
| ãã£ã³ãã«æ° | 2 |
| ãã£ã³ãã«ã®è§£é | "speakers" |
ã³ã³ã¹ãã©ã¯ã¿ã¼
AnalyserNode()-
AnalyserNodeãªãã¸ã§ã¯ãã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãçæãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
親ã§ãã AudioNode ããç¶æ¿ããããããã£ãããã¾ãã
AnalyserNode.fftSize-
符å·ãªã long åã®å¤ã§ã FFTï¼é«éãã¼ãªã¨å¤æï¼ã«ããã¦å¨æ³¢æ°é åãæ±ºå®ããããã«ä½¿ããã¦ãããµã¤ãºã表ãã¾ãã
AnalyserNode.frequencyBinCountèªåå°ç¨-
符å·ãªã long åã®å¤ã§ã FFT ã®ãµã¤ãºã®ååã®å¤ãä¸è¬çã«é³å£°åçæã®å¯è¦åã«ç¨ãããã¾ãã
AnalyserNode.minDecibels-
double åã®å¤ã§ã unsigned byte åã®å¤ã¸å¤æãã FFT åæãã¼ã¿ã®ã¹ã±ã¼ãªã³ã°æã®æå°ã®ãã¯ã¼å¤ã表ãã¾ããä¸è¬çã«ããã®å¤ã¯ã
getByteFrequencyData()ã®ä½¿ç¨æã®çµæã®ç¯å²ã®æå°å¤ãæå®ãã¾ãã AnalyserNode.maxDecibels-
double åã®å¤ã§ã unsigned byte åã®å¤ã¸å¤æãã FFT åæãã¼ã¿ã®ã¹ã±ã¼ãªã³ã°æã®æå¤§ã®ãã¯ã¼å¤ã表ãã¾ããä¸è¬çã«ããã®å¤ã¯ã
getByteFrequencyData()ã®ä½¿ç¨æã®çµæã®ç¯å²ã®æå¤§å¤ãæå®ãã¾ãã AnalyserNode.smoothingTimeConstant-
double åã®å¤ã§ãåæãã¬ã¼ã ã®å¹³åééã表ãã¾ããåºæ¬çã«ãæéçã«ã¹ãã¯ãã«ãå¹³æ»åãããã®ã«ç¨ãããã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
親ã§ãã AudioNode ããç¶æ¿ããã¡ã½ãããããã¾ãã
AnalyserNode.getFloatFrequencyData()-
ç¾å¨ã®å¨æ³¢æ°ãã¼ã¿ãã弿°ã¨ãã¦æ¸¡ããã
Float32Arrayé åã¸ã³ãã¼ãã¾ãã AnalyserNode.getByteFrequencyData()-
ç¾å¨ã®å¨æ³¢æ°ãã¼ã¿ãã弿°ã¨ãã¦æ¸¡ããã
Uint8Arrayé åï¼unsigned byte é åï¼ã¸ã³ãã¼ãã¾ãã AnalyserNode.getFloatTimeDomainData()-
ç¾å¨ã®æ³¢å½¢ã¾ãã¯æéé åãã¼ã¿ããæ¸¡ããã
Float32Arrayé åã¸ã³ãã¼ãã¾ãã AnalyserNode.getByteTimeDomainData()-
ç¾å¨ã®æ³¢å½¢ã¾ãã¯æéé åãã¼ã¿ãã弿°ã¨ãã¦æ¸¡ããã
Uint8Arrayé åï¼unsigned byte é åï¼ã¸ã³ãã¼ãã¾ãã
ä¾
ã¡ã¢: é³å£°ã®è¦è¦åã使ããããã®è©³ç´°ã¯ãã¦ã§ããªã¼ãã£ãª API ã®è¦è¦åã®ã¬ã¤ããåç §ãã¦ãã ããã
åºæ¬çãªä½¿ãæ¹
次ã®ä¾ã§ã¯ã AudioContext ã§ AnalyserNode ã使ãã requestAnimationFrame 㨠<canvas> ã§æå»é åã®ãã¼ã¿ãç¹°ãè¿ãåéããç¾å¨ã®é³å£°å
¥åã®ããªã·ãã¹ã³ã¼ããåºåãæç»ããåºæ¬çãªä½¿ç¨æ¹æ³ã示ãã¾ãã
ããå®å
¨ãªå¿ç¨ä¾/æ
å ±ã«ã¤ãã¦ã¯ã Voice-change-O-matic ã®ãã¢ã調ã¹ã¦ãã ããï¼é¢é£ããã³ã¼ã㯠app.js ã® 108-193 è¡ç®ãåç
§ï¼ã
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
// â¦
const analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);
// Connect the source to be analysed
source.connect(analyser);
// Get a canvas defined with ID "oscilloscope"
const canvas = document.getElementById("oscilloscope");
const canvasCtx = canvas.getContext("2d");
// draw an oscilloscope of the current audio source
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();
const sliceWidth = (canvas.width * 1.0) / bufferLength;
let x = 0;
for (let i = 0; i < bufferLength; i++) {
const v = dataArray[i] / 128.0;
const 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();
仿§æ¸
| 仿§æ¸ |
|---|
| Web Audio API > # AnalyserNode > |