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.
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:
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).
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