| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/ja/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API | [Back] [Original] |
Get to know MDN better
AnalyserNode BaseAudioContext.createAnalyser
const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();
const source = audioCtx.createMediaStreamSource(stream);
source.connect(analyser);
analyser.connect(distortion);
distortion.connect(audioCtx.destination);
:
AnalyserNode.fftSize 2048 (fft)
AnalyserNode.getFloatFrequencyData() AnalyserNode.getByteFrequencyData() AnalyserNode.getByteTimeDomainData() AnalyserNode.getFloatTimeDomainData()
32 2 3 8 JavaScript Float32Array Uint8Array
2048 fft fft AnalyserNode.frequencyBinCount frequencyBinCount Uint8Array() fft
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);
HTML <canvas>
Voice-change-O-matic Soledad Penads
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
draw()
requestAnimationFrame() function draw() {
const 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();
//
const sliceWidth = WIDTH / bufferLength;
let x = 0;
for (let i = 0; i < bufferLength; i++) {
const v = dataArray[i] / 128.0;
const y = v * (HEIGHT / 2);
if (i === 0) {
canvasCtx.moveTo(x, y);
} else {
canvasCtx.lineTo(x, y);
}
x += sliceWidth;
}
//
canvasCtx.lineTo(WIDTH, HEIGHT / 2);
canvasCtx.stroke();
}
draw()
draw();
1
Winamp 1 Voice-change-O-matic
clearRect() fft
analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);
draw() requestAnimationFrame()
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteFrequencyData(dataArray);
canvasCtx.fillStyle = "rgb(0 0 0)";
canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
// ...
}
barWidth 2.5
barHeight x
function draw() {
// ...
const barWidth = (WIDTH / bufferLength) * 2.5;
let barHeight;
let x = 0;
// ...
}
for dataArray barHeight barHeight barWidth barHeight / 2 x
HEIGHT - barHeight / 2 0 barHeight / 2
function draw() {
// ...
for (let i = 0; i < bufferLength; i++) {
barHeight = dataArray[i] / 2;
canvasCtx.fillStyle = `rgb(${barHeight + 100} 50 50)`;
canvasCtx.fillRect(x, HEIGHT - barHeight / 2, barWidth, barHeight);
x += barWidth + 1;
}
// ...
}
draw()
draw();
AnalyserNodeAudioBufferAudioBufferSourceNodeAudioContextAudioDestinationNodeAudioListenerAudioNodeAudioParamAudioProcessingEventAudioScheduledSourceNodeAudioSinkInfoAudioWorkletAudioWorkletGlobalScopeAudioWorkletNodeAudioWorkletProcessorBaseAudioContextBiquadFilterNodeChannelMergerNodeChannelSplitterNodeConstantSourceNodeConvolverNodeDelayNodeDynamicsCompressorNodeGainNodeIIRFilterNodeMediaElementAudioSourceNodeMediaStreamAudioDestinationNodeMediaStreamAudioSourceNodeOfflineAudioCompletionEventOfflineAudioContextOscillatorNodePannerNodePeriodicWaveWaveShaperNodeStereoPannerNode| Web Proxy Viewer | New URL | Original Page |