Baseline Widely available
AnalyserNode
æ¥å£ç getByteFrequencyData()
æ¹æ³å°å½åé¢çæ°æ®å¤å¶å°ä¼ å
¥ç Uint8Arrayï¼æ 符å·åèæ°ç»ï¼ä¸ã
妿æ°ç»çé¿åº¦å°äº AnalyserNode.frequencyBinCount
, é£ä¹ Analyser å¤åºçå
ç´ ä¼è¢«å é¤ã妿æ¯å¤§äºï¼é£ä¹æ°ç»å¤ä½çå
ç´ ä¼è¢«å¿½ç¥ã
var audioCtx = new AudioContext();
var analyser = audioCtx.createAnalyser();
var dataArray = new Uint8Array(analyser.frequencyBinCount); // Uint8Array çé¿åº¦åºè¯¥å frequencyBinCount ç¸ç
analyser.getByteFrequencyData(dataArray); // è°ç¨ getByteFrequencyData æ¹æ³å¡«å
Uint8Array
è¿åå¼
ä¸ä¸ª Uint8Array
ï¼æ 符å·åèæ°ç»ï¼.
ä¸é¢çä¾åå±ç¤ºäº AudioContext
å建ä¸ä¸ª AnalyserNode
, ç¶åç¨ requestAnimationFrame
å <canvas>
å»å夿¶éå½åé³é¢çé¢çæ°æ®ï¼å¹¶ç»å¶ä¸ºä¸ä¸ªæ±ç¶é£æ ¼çè¾åº (é¢è°±).
æ´å¤çä¾å/ä¿¡æ¯ï¼æ¥ç Voice-change-O-matic æ¼ç¤º (ç¸å ³ä»£ç å¨ app.js ç 128 è¡~205 è¡).
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioCtx.createAnalyser();
...
analyser.fftSize = 256;
var bufferLength = analyser.frequencyBinCount;
console.log(bufferLength);
var dataArray = new Uint8Array(bufferLength);
canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteFrequencyData(dataArray);
canvasCtx.fillStyle = 'rgb(0, 0, 0)';
canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
var barWidth = (WIDTH / bufferLength) * 2.5;
var barHeight;
var x = 0;
for(var i = 0; i < bufferLength; i++) {
barHeight = dataArray[i];
canvasCtx.fillStyle = 'rgb(' + (barHeight+100) + ',50,50)';
canvasCtx.fillRect(x,HEIGHT-barHeight/2,barWidth,barHeight/2);
x += barWidth + 1;
}
};
draw();
åæ°
å¿
须为Uint8Array
, é¢åæ°æ®å°å¤å¶å°è¯¥æ°ç»å
ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4