AnalyserNode

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.

Die AnalyserNode-Schnittstelle repräsentiert einen Knoten, der in der Lage ist, Echtzeit-Informationen zur Frequenz- und Zeitbereichsanalyse bereitzustellen. Sie ist ein AudioNode, der den Audiostream unverändert vom Eingang zum Ausgang durchlaufen lässt, es Ihnen jedoch ermöglicht, die erzeugten Daten zu nutzen, zu verarbeiten und Audio-Visualisierungen zu erstellen.

Ein AnalyserNode hat genau einen Eingang und einen Ausgang. Der Knoten funktioniert auch, wenn der Ausgang nicht verbunden ist.

Ohne den Audiostream zu modifizieren, ermöglicht der Knoten die Erfassung von Frequenz- und Zeitbereichsdaten, die damit in Verbindung stehen, unter Verwendung einer FFT.

EventTarget AudioNode AnalyserNode
Anzahl der Eingänge 1
Anzahl der Ausgänge 1 (kann jedoch nicht verbunden bleiben)
Channel-Count-Modus "max"
Channel-Anzahl 2
Channel-Interpretation "speakers"

Konstruktor

AnalyserNode()

Erstellt eine neue Instanz eines AnalyserNode-Objekts.

Instanz-Eigenschaften

Erbt Eigenschaften von seinem Elternteil, AudioNode.

AnalyserNode.fftSize

Ein unsigned long-Wert, der die Größe der FFT (Fast Fourier Transform) darstellt, die verwendet wird, um den Frequenzbereich zu bestimmen.

AnalyserNode.frequencyBinCount Nur lesbar

Ein unsigned long-Wert, der die Hälfte der FFT-Größe beträgt. Dies entspricht im Allgemeinen der Anzahl der Datenwerte, die Sie für die Visualisierung verwenden können.

AnalyserNode.minDecibels

Ein double-Wert, der den minimalen Leistungswert im Skalierungsbereich für die FFT-Analysedaten darstellt, zur Umwandlung in unsigned Byte-Werte — im Grunde gibt dies den Mindestwert für den Bereich der Ergebnisse an, wenn getByteFrequencyData() verwendet wird.

AnalyserNode.maxDecibels

Ein double-Wert, der den maximalen Leistungswert im Skalierungsbereich für die FFT-Analysedaten darstellt, zur Umwandlung in unsigned Byte-Werte — im Grunde gibt dies den Maximalwert für den Bereich der Ergebnisse an, wenn getByteFrequencyData() verwendet wird.

AnalyserNode.smoothingTimeConstant

Ein double-Wert, der die Mittelungskonstante mit dem letzten Analyse-Frame darstellt — im Wesentlichen wird der Übergang zwischen Werten über die Zeit sanfter gestaltet.

Instanz-Methoden

Erbt Methoden von seinem Elternteil, AudioNode.

AnalyserNode.getFloatFrequencyData()

Kopiert die aktuellen Frequenzdaten in ein Float32Array-Array, das an die Methode übergeben wird.

AnalyserNode.getByteFrequencyData()

Kopiert die aktuellen Frequenzdaten in ein Uint8Array (Unsigned Byte-Array), das an die Methode übergeben wird.

AnalyserNode.getFloatTimeDomainData()

Kopiert die aktuelle Wellenform oder Zeitbereichsdaten in ein Float32Array-Array, das an die Methode übergeben wird.

AnalyserNode.getByteTimeDomainData()

Kopiert die aktuelle Wellenform oder Zeitbereichsdaten in ein Uint8Array (Unsigned Byte-Array), das an die Methode übergeben wird.

Beispiele

Hinweis: Siehe den Leitfaden Visualisierungen mit der Web Audio API für weitere Informationen zur Erstellung von Audiovisualisierungen.

Grundlegende Nutzung

Das folgende Beispiel zeigt die grundlegende Nutzung eines AudioContext, um einen AnalyserNode zu erstellen, gefolgt von einer Nutzung von requestAnimationFrame und einem <canvas>, um auf wiederholende Weise Zeitbereichsdaten zu sammeln und eine "Oszilloskop-ähnliche" Ausgabe des aktuellen Audioeingangs zu zeichnen. Für vollständigere angewandte Beispiele/Informationen besuchen Sie unser Voice-change-O-matic Demo (siehe app.js Zeilen 108-193 für relevanten Code).

js
const audioCtx = new AudioContext();

// …

const analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;

const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);

// Connect the source to be analyzed
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();

Spezifikationen

Specification
Web Audio API
# AnalyserNode

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch