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()` (en-US), ou à partir de données brutes avec `AudioContext.createBuffer()` (en-US). 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.

Constructeur
------------

`AudioBuffer()`

Crée et retourne un nouvel objet `AudioBuffer`.

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` (en-US) 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.


```js
// 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
--------------

| Specification |
| --- |
| Web Audio API # AudioBuffer |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Utiliser la Web Audio API