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.

L' interface AnalyserNode représente un noeud capable de fournir en temps réel des informations d'analyse de la fréquence et du domaine temporel. C'est un AudioNode qui transmet le flux audio inchangé depuis l'entrée vers la sortie, mais permet de capturer les données générées pour les traiter et/ou les visualiser.

Il a exactement une entrée et une sortie. Le noeud fonctionne même si la sortie n'est pas connectée.

Sans modifier le flux audio, le nœud permet d'obtenir la fréquence et les données temporelles associées en utilisant une transformée de Fourier rapide.

Nombre d'entrées 1
Nombre de sorties 1 (mais peut ne pas être connectée)
Mode de comptage des canaux "explicit"
Nombre de canaux 1
Interprétation du canal "speakers"

Héritage

L'interface hérite des parents suivants:

EventTarget AudioNode AnalyserNode

Constructeur

AnalyserNode()

Crée une nouvelle instance de l'objet AnalyserNode.

Propriétés

Hérite des propriétés de son parent. AudioNode.

AnalyserNode.fftSize

Entier long non signé qui représente la taille de la FFT (transformation de Fourier rapide) qui sera utilisé pour déterminer le domaine fréquentiel.

AnalyserNode.frequencyBinCount Lecture seule

Entier long non signé égal à la moitié fftSize. C'est en général le nombre de valeurs qu'on manipule pour la visualisation.

AnalyserNode.minDecibels

Nombre flottant à double précision qui représente la valeur minimale de puissance dans la plage de mise à l'échelle pour l'analyse des données FFT, pour la conversion en octets non signés - cela équivaut à la valeur minimum de la plage de résultats de getByteFrequencyData().

AnalyserNode.maxDecibels

Nombre flottant à double précision qui représente la valeur maximale de puissance dans la plage de mise à l'échelle pour l'analyse des données FFT, pour la conversion en octets non signés - cela équivaut à la valeur maximum de la plage de résultats de getByteFrequencyData().

AnalyserNode.smoothingTimeConstant

Nombre flottant à double précision qui représente la moyenne de la trame en cours avec la dernière trame analysée - elle permet de lisser la transition entre les valeurs.

Méthodes

Hérite des propriétés de son parent, AudioNode.

AnalyserNode.getFloatFrequencyData()

Copie les données de fréquence dans un tableau Float32Array passé en paramètre.

AnalyserNode.getByteFrequencyData()

Copie les données de fréquence dans un tableau Uint8Array passé en paramètre.

AnalyserNode.getFloatTimeDomainData()

Copie les données de forme d'onde ou du domaine temporel dans un tableau Float32Array passé en paramètre.

AnalyserNode.getByteTimeDomainData()

Copie les données de forme d'onde ou du domaine temporel dans un tableau Uint8Array passé en paramètre.

Exemples

Note : Voir Visualisations avec la Web Audio API pour plus d'informations.

L'exemple suivant montre comment créer simplement un AnalyserNode avec AudioContext, puis utiliser requestAnimationFrame et <canvas> pour collecter les données temporelles et dessiner un oscilloscope en sortie. Pour des exemples plus complets, voir notre démo Voice-change-O-matic (et en particulier app.js lines 128–205).

js
var contexteAudio = new (window.AudioContext || window.webkitAudioContext)();
var analyseur = contexteAudio.createAnalyser();

  ...

analyseur.fftSize = 2048;
var tailleMemoireTampon = analyseur.frequencyBinCount;
var tableauDonnees = new Uint8Array(tailleMemoireTampon);
analyseur.getByteTimeDomainData(tableauDonnees);

// dessine un oscilloscope de la source audio
var canvas = document.getElementById("oscilloscope");
var contexteCanvas = canvas.getContext("2d");

function dessiner() {

      requestAnimationFrame(dessiner);

      analyseur.getByteTimeDomainData(tableauDonnees);

      contexteCanvas.fillStyle = 'rgb(200, 200, 200)';
      contexteCanvas.fillRect(0, 0, WIDTH, HEIGHT);

      contexteCanvas.lineWidth = 2;
      contexteCanvas.strokeStyle = 'rgb(0, 0, 0)';

      contexteCanvas.beginPath();

      var sliceWidth = WIDTH * 1.0 / tailleMemoireTampon;
      var x = 0;

      for(var i = 0; i < tailleMemoireTampon; i++) {

        var v = tableauDonnees[i] / 128.0;
        var y = v * HEIGHT/2;

        if(i === 0) {
          contexteCanvas.moveTo(x, y);
        } else {
          contexteCanvas.lineTo(x, y);
        }

        x += sliceWidth;
      }

      contexteCanvas.lineTo(canvas.width, canvas.height/2);
      contexteCanvas.stroke();
    };

    dessiner();

Spécifications

Specification
Web Audio API
# AnalyserNode

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi