L'interface AudioBufferSourceNode est un AudioScheduledSourceNode qui représente une source audio constituée de données audio en mémoire, stockées dans un AudioBuffer. Elle est particulièrement utile pour lire des sons qui requierrent des conditions de lecture particulières, comme la synchronisation sur un certain rythme, et peuvent être stockés en mémoire. Si ce type de son doit être lu depuis le disque ou le réseau, il conviendra d'utiliser un AudioWorkletNode.

Un AudioBufferSourceNode n'a pas d'entrée et exactement une sortie, dont le nombre de canaux est spécifié par la propriété buffer. Si aucun buffer n'est paramétré, c'est-à-dire si la valeur de l'attribut est NULL, la sortie contient un seul canal silencieux (chaque échantillon vaut 0).


Un AudioBufferSourceNode ne peut être joué qu'une seule fois; autrement dit un seul appel à la fonction AudioBufferSourceNode.start() est autorisé. Pour rejouer le son, il faut créer un nouvel AudioBufferSourceNode. Heureusement ces noeuds ne demandent pas beaucoup de ressource, et les véritables AudioBuffers peuvent être réutilisés. On dit que les AudioBufferSourceNodes doivent être utilisés en mode "one shot": une fois que la lecture est lancée, toutes les références peuvent être supprimées, et elles seront collectées par le ramasse-miette automatiquement quand la lecture des sons sera terminée.

Plusieurs appels à la fonction AudioBufferSourceNode.stop() sont autorisés. Le dernier appel remplace le précédent, à condition que le AudioBufferSourceNode n'ait pas déjà atteint la fin du buffer.

The AudioBufferSourceNode takes the content of an AudioBuffer and m

 

Nombre d'entrées 0
Nombre de sorties 1
Nombre de canaux défini par l'objet AudioBuffer associé

Constructeur

AudioBufferSourceNode()
Crée et retourne un nouvel objet AudioBufferSourceNode. Un AudioBufferSourceNode peut être instancié à l'aide la méthode AudioContext.createBufferSource().

Propriétés

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

AudioBufferSourceNode.buffer
AudioBuffer qui définit la ressource à jouer; lorsqu'il a la valeur NULL, définit un canal unique silencieux (dans lequel chaque échantillon vaut 0.0).
AudioBufferSourceNode.detune
AudioParam de type k-rate représentant le désaccordage de la fréquence exprimé en cents. Cette valeur est composée à partir du playbackRate pour déterminer la vitesse à laquelle le son sera jouée. Sa valeur par défaut est 0 (qui correspond à aucun désaccordage), et son rang nominal va de -∞ à ∞.
AudioBufferSourceNode.loop
Attribut booléen indiquant si la ressource doit être lue de nouveau lorsque la fin de l'AudioBuffer est atteinte. Sa valeur par défaut est false.
AudioBufferSourceNode.loopStart Facultatif
Nombre flottant à double précision indiquant, en secondes, à quel moment de l'AudioBuffer la lecture doit reprendre. Sa valeur par défaut est 0.
AudioBufferSourceNode.loopEnd Facultatif
Nombre flottant à double précision indiquant, en secondes, à quel moment de l'AudioBuffer la relecture doit s'arrêter (et éventuellement boucler à nouveau). Sa valeur par défaut est 0.
AudioBufferSourceNode.playbackRate
AudioParam de type a-rate qui définit le facteur de vitesse à laquelle la ressource audio sera jouée. Comme aucune correction de pitch n'est appliquée sur la sortie, il peut être utilisé pour modifier le pitch de l'échantillon.

Gestionnaires d'évènement

Hérite des gestionnaires d'évènement de son parent, AudioScheduledSourceNode.

Méthodes

Hérite des méthodes de son parent, AudioNode.

Exemple

Cet exemple crée un tampon de deux secondes, le remplit avec du bruit blanc et le joue par l'intermédiaire d'un AudioBufferSourceNode.

Note: Vous pouvez aussi exécuter the code, ou regarder le code source.

var contexteAudio = new (window.AudioContext || window.webkitAudioContext)();
var bouton = document.querySelector('button');
var pre = document.querySelector('pre');
var monScript = document.querySelector('script');

pre.innerHTML = monScript.innerHTML;

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

// Crée un tampon vide de deux secondes
// au taux d'échantillonnage du AudioContext
var compteurTrames = contexteAudio.sampleRate * 2.0;

var myArrayBuffer = contexteAudio.createBuffer(2, compteurTrames, contexteAudio.sampleRate);

bouton.onclick = function() {
  // remplit le tampon avec du bruit blanc;
  // valeurs aléatoires entre -1.0 et 1.0
  for (var canal = 0; canal < canaux; canal++) {
   // crée le ArrayBuffer qui contient les données
   var nowBuffering = myArrayBuffer.getChannelData(canal);
   for (var i = 0; i < compteurTrames; i++) {
     // Math.random() est compris entre [0; 1.0]
     // audio doit être compris entre [-1.0; 1.0]
     nowBuffering[i] = Math.random() * 2 - 1;
   }
  }

  // crée AudioBufferSourceNode.
  // c'est AudioNode utilisé pour lire un AudioBuffer
  var source = contexteAudio.createBufferSource();
  // initialise le tampon du AudioBufferSourceNode
  source.buffer = myArrayBuffer;
  // connecte l'AudioBufferSourceNode avec la destination
  // de façon à ce qu'on puisse entendre le son
  source.connect(contexteAudio.destination);
  // lance la lecture de la source
  source.start();
}

Note: Pour un exemple de decodeAudioData(), voir la page AudioContext.decodeAudioData.

Spécifications

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

Compatibilité navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple14 Oui25 Non156
AudioBufferSourceNode() constructor551 ?53 Non42 ?
buffer1412252 Non156
detune441340 Non31 Non
loop141225 Non156
loopStart141225 Non156
loopEnd141225 Non156
onended14 ? ? ? Oui — 44 ?
playbackRate141225 Non156
start14 — 571225 Non156
stop14 ? ? ? Oui — 44 ?
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Support simple1418 Oui2615 ? Oui
AudioBufferSourceNode() constructor551551 ?5342 ?6.0
buffer Oui18 Oui26215 ? Oui
detune4444 Oui4031 ? Oui
loop Oui18 Oui2615 ? Oui
loopStart Oui18 Oui2615 ? Oui
loopEnd Oui18 Oui2615 ? Oui
onended1418 ? ? Oui — 44 ? ?
playbackRate Oui18 Oui2615 ? Oui
start1418 Oui2615 ? Oui
stop1418 ? ? Oui — 44 ? ?

1. Before version 59, the default values were not supported.

2. Firefox currently handles the value null incorrectly. Instead of producing a node that generates a single channel of silence, the node becomes unusable and will be ignored if you attempt to connect it to anything.

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, marie-ototoi, sizvix, dooxe, fscholz, teoli, tregagnon, dexterneo
Dernière mise à jour par : SphinxKnight,