AnalyserNode: getFloatTimeDomainData() method
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
ThegetFloatTimeDomainData() method of theAnalyserNode Interface copies the current waveform, or time-domain, data into aFloat32Array array passed into it. Each array value is asample, the magnitude of the signal at a particular time.
The waveform is represented as PCM data, which has a nominal range of -1.0 to 1.0, but values can exceed the range such as when down-mixing stereo to mono.
In this article
Syntax
getFloatTimeDomainData(array)Parameters
arrayThe
Float32Arraythat the time domain data will be copied to.If the array has fewer elements than theAnalyserNode.fftSize, excess elements are dropped. If it has more elements than needed, excess elements are ignored.
Return value
None (undefined).
Examples
The following example shows basic usage of anAudioContext to create anAnalyserNode, thenrequestAnimationFrame and<canvas> to collect time domain data repeatedly and draw an "oscilloscope style" output of the current audio input.For more complete applied examples/information, check out ourVoice-change-O-matic demo (seeapp.js lines 108–193 for relevant code).
const audioCtx = new AudioContext();const analyser = audioCtx.createAnalyser();// …analyser.fftSize = 1024;const bufferLength = analyser.fftSize;console.log(bufferLength);const dataArray = new Float32Array(bufferLength);canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);function draw() { drawVisual = requestAnimationFrame(draw); analyser.getFloatTimeDomainData(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 * 1.0) / bufferLength; let x = 0; for (let i = 0; i < bufferLength; i++) { const v = dataArray[i] * 200.0; const y = HEIGHT / 2 + v; if (i === 0) { canvasCtx.moveTo(x, y); } else { canvasCtx.lineTo(x, y); } x += sliceWidth; } canvasCtx.lineTo(canvas.width, canvas.height / 2); canvasCtx.stroke();}draw();Specifications
| Specification |
|---|
| Web Audio API> # dom-analysernode-getfloattimedomaindata> |