Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

AudioBuffer

L'interface AudioBuffer représente une ressource audio stockée en mémoire, créée à partir d'un fichier audio avec la méthode AudioContext.decodeAudioData(), ou à partir de données brutes avec AudioContext.createBuffer(). Une fois mises en mémoire dans un AudioBuffer, les données audio sont transférées dans un AudioBufferSourceNode afin d'être lues.

Ce type d'objet est conçu pour contenir de petit extraits audio, durant généralement moins de 45s. Pour les sons plus longs, les objets implémentant MediaAudioElementSourceNode sont plus adaptés. La mémoire tampon contient des données au format non entrelacé IEEE 32-bit PCM linéaire, avec une portée nominale comprise entre -1 et +1. S'il y a plusieurs canaux, ils sont stockés dans des mémoires-tampon distinctes.

Propriétés

AudioBuffer.sampleRate Lecture seule
Retourne un nombre flottant qui représente la fréquence d'échantillonnage, en échantillons par seconde, des données PCM stockées dans la mémoire tampon.
AudioBuffer.length Lecture seule
Retourne un nombre entier qui représente la longueur, en trames d'échantillonnage , des données PCM stockées dans la mémoire tampon.
AudioBuffer.duration Lecture seule
Retourne un nombre à virgule flottante de double précision qui représente la durée, exprimée en secondes, des données PCM stockées dans la mémoire tampon.
AudioBuffer.numberOfChannels Lecture seule
Retourne un nombre entier qui représente le nombre de canaux audio discrets décrits par les données PCM stockées dans la mémoire tampon.

Méthodes

AudioBuffer.getChannelData()
Retourne un Float32Array contenant les données PCM associés au canal, défini par l'index du canal (0 représentant le premier canal).
AudioBuffer.copyFromChannel()
Copie les échantillons du canal associé à AudioBuffer dans un tableau de destination.
AudioBuffer.copyToChannel()
Copie les échantillons dans le canal associé à AudioBuffer, depuis le tableau source.

Exemple

L'exemple suivant montre comment créer un  AudioBuffer et le remplir avec du bruit blanc. Le code source est disponible sur notre repo audio-buffer demo; une version live est également consultable.

// Stéréo
var nombreCanaux = 2;

// Crée une mémoire tampon vide de 2 secondes
// à la fréquence d'échantillonage du contexte AudioContext
var nombreFrames = contexteAudio.sampleRate * 2.0;
var tableauDonnees = audioCtx.createBuffer(nombreCanaux, nombreFrames, contexteAudio.sampleRate);

bouton.onclick = function() {
  // remplit la mémoire tampon avec du bruit blanc
  // valeurs aléatoires entre -1.0 et 1.0
  for (var canal = 0; canal < nombreCanaux; canal++) {
    // génère le tableau contenant les données
    var tampon = tableauDonnees.getChannelData(canal);
    for (var i = 0; i < nombreFrames; i++) {
      // Math.random() donne une valeur comprise entre [0; 1.0]
      // l'audio doit être compris entre [-1.0; 1.0]
      tampon[i] = Math.random() * 2 - 1;
    }
  }

  // Récupère un AudioBufferSourceNode.
  // C'est un AudioNode à utiliser quand on veut jouer AudioBuffer
  var source = contexteAudio.createBufferSource();

  // assigne le buffer au AudioBufferSourceNode
  source.buffer = tableauDonnees;

  // connecte le AudioBufferSourceNode avec
  // la destination pour qu'on puisse entendre le son
  source.connect(contexteAudio.destination);

  // lance la lecture du so
  source.start();

}

Spécifications

Spécification Statut Commentaire
Web Audio API
La définition de 'AudioBuffer' dans cette spécification.
Version de travail Définition initiale

Compatibilité navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support basique 14 webkit 25 (25) Pas de support 15 webkit
22
6 webkit
copyFromChannel() and copyToChannel() ? 27 (27) Pas de support ? ?
Fonctionnalité Android Chrome Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Support basique Pas de support 28 webkit 25.0 (25) 1.2 Pas de support Pas de support webkit
copyFromChannel() and copyToChannel() Pas de support ? 27.0 (27)   Pas de support

 

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : marie-ototoi, fscholz, Goofy, tregagnon, dexterneo
 Dernière mise à jour par : marie-ototoi,