--- title: AudioBuffer slug: Web/API/AudioBuffer tags: - API - Experimental - Reference - Web Audio API translation_of: Web/API/AudioBuffer ---
{{APIRef("Web Audio API")}}
L'interface AudioBuffer représente une ressource audio stockée en mémoire, créée à partir d'un fichier audio avec la méthode {{ domxref("AudioContext.decodeAudioData()") }}, ou à partir de données brutes avec {{ domxref("AudioContext.createBuffer()") }}. Une fois mises en mémoire dans un AudioBuffer, les données audio sont transférées dans un {{ domxref("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 {{domxref ("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.
AudioBuffer
.AudioBuffer
dans un tableau de destination.AudioBuffer
, depuis le tableau source
.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écification | Statut | Commentaire |
---|---|---|
{{SpecName('Web Audio API', '#AudioBuffer-section', 'AudioBuffer')}} | {{Spec2('Web Audio API')}} | Définition initiale |
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Support basique | {{CompatChrome(14.0)}} {{property_prefix("webkit")}} | {{CompatVersionUnknown}} | {{CompatGeckoDesktop(25)}} | {{CompatNo}} | {{CompatOpera(15)}} {{property_prefix("webkit")}} {{CompatOpera(22)}} |
6 {{property_prefix("webkit")}} |
copyFromChannel() and copyToChannel() |
{{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoDesktop(27)}} | {{CompatNo}} | {{CompatUnknown}} | {{CompatNo}} |
constructeur | {{CompatChrome(55.0)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatOpera(42)}} | {{CompatUnknown}} |
Fonctionnalité | Android | Android Webview | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|---|---|
Support basique | {{CompatNo}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile(25)}} | 1.2 | {{CompatNo}} | {{CompatVersionUnknown}} | 6 {{property_prefix("webkit")}} | {{CompatChrome(28.0)}} {{property_prefix("webkit")}} |
copyFromChannel() and copyToChannel() |
{{CompatNo}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile(27)}} | {{CompatNo}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatVersionUnknown}} | |
constructeur | {{CompatNo}} | {{CompatChrome(55.0)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatOperaMobile(42)}} | {{CompatUnknown}} | {{CompatChrome(55.0)}} |