L'interface AudioListener représente la position et l'orientation de l'unique personne écoutant la scène audio; elle est utilisée dans le cadre d'une spatialisation audio. Tous les PannerNode sont spatialisés par rapport à l'objet AudioListener stocké dans la propriété AudioContext.listener.

Il est important de noter qu'il n'y a qu'un seul auditeur par contexte, et qu'il ne s'agit pas d'un AudioNode.

We see the position, velocity, up and front vectors of an AudioListener, with the up and front vectors at 90° each from the other

La position de l'auditeur est décrite avec des coodonnées cartésiennes selon la règle de la main droite,  son mouvement à l'aide d'un vecteur de vélocité et la direction vers laquelle elle pointe en utilisant deux vecteurs de direction : haut et face. Ceux-ci définissent respectivement la direction vers laquelle pointent le haut de la tête et le bout du nez de l'auditeur, et forment un angle droit entre eux.

Propriétés

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

Méthodes

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

AudioListener.setOrientation()
Définit l'orientation de l'auditeur.

Fonctionnalités obsolètes

Dans une version précédente de la spécification, les trois objets listés ci-dessous pouvaient être utilisés pour contrôler un effet doppler appliqué à un AudioBufferSourceNode monté en aval - ils pouvaient être transposés en fonction de la vitesse relative du PannerNode, et de l'AudioListener. Ces fonctionnalités soulevaient un certain nombre de problèmes :

  • Seuls les AudioBufferSourceNode étaient transposés, pas les autres noeuds source.
  • Le comportement à adopter lorsqu'un AudioBufferSourceNode était connecté à plusieurs PannerNode n'était pas clair.
  • Comme la vélocité du panoramique et de l'auditeur n'étaient pas des AudioParam, la modification du pitch ne pouvait pas être appliquée uniformément, ce qui provoquait des irrégularités dans le son.
AudioListener.dopplerFactor
Un nombre flottant à double précision représentant la quantité de modulation de pitch à utiliser pour le rendu d'un doppler effect.
AudioListener.speedOfSound
Un nombre flottant à double précision représentant la vitesse du son, en mètres par seconde.
AudioListener.setPosition()
Définit la position de l'auditeur.

Exemples

In the following example, you can see an example of how the createPanner() method, AudioListener  and PannerNode would be used to control audio spatialisation. Generally you will define the position in 3D space that your audio listener and panner (source) occupy initially, and then update the position of one or both of these as the application is used. You might be moving a character around inside a game world for example, and wanting delivery of audio to change realistically as your character moves closer to or further away from a music player such as a stereo. In the example you can see this being controlled by the functions moveRight(), moveLeft(), etc., which set new values for the panner position via the PositionPanner() function.

To see a complete implementation, check out our panner-node example (view the source code) — this demo transports you to the 2.5D "Room of metal", where you can play a track on a boom box and then walk around the boom box to see how the sound changes!

// define Web Audio API objects

var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();

var panner = audioCtx.createPanner();
panner.panningModel = 'HRTF';
panner.distanceModel = 'inverse';
panner.refDistance = 1;
panner.maxDistance = 10000;
panner.rolloffFactor = 1;
panner.coneInnerAngle = 360;
panner.coneOuterAngle = 0;
panner.coneOuterGain = 0;
panner.setOrientation(1,0,0);

var listener = audioCtx.listener;
listener.setOrientation(0,0,-1,0,1,0);

var source;

var boomBox = document.querySelector('.boom-box');

// set up listener and panner position information
var WIDTH = window.innerWidth;
var HEIGHT = window.innerHeight;

var xPos = WIDTH/2;
var yPos = HEIGHT/2;
var zPos = 295;

leftBound = (-xPos) + 50;
rightBound = xPos - 50;

xIterator = WIDTH/150;

// listener will always be in the same place for this demo
listener.setPosition(xPos,yPos,300);
listenerData.innerHTML = 'Listener data: X ' + xPos + ' Y ' + yPos + ' Z ' + 300;

// panner will move as the boombox graphic moves around on the screen
function positionPanner() {
  panner.setPosition(xPos,yPos,zPos);
  pannerData.innerHTML = 'Panner data: X ' + xPos + ' Y ' + yPos + ' Z ' + zPos;
}

// controls to move left and right past the boom box
// and zoom in and out
// only right movement code shown in this listing to save space
// look at the source code for full listing

var leftButton = document.querySelector('.left');
var rightButton = document.querySelector('.right');
var zoomInButton = document.querySelector('.zoom-in');
var zoomOutButton = document.querySelector('.zoom-out');

var boomX = 0;
var boomY = 0;
var boomZoom = 0.25;

var zoomInLoop;
var zoomOutLoop

function moveRight() {
  boomX += -xIterator;
  xPos += -0.066;

  if(boomX <= leftBound) {
    boomX = leftBound;
    xPos = (WIDTH/2) - 5;
  }

  boomBox.style.transform = "translate(" + boomX + "px , " + boomY + "px) scale(" + boomZoom + ")";
  positionPanner();
  rightLoop = requestAnimationFrame(moveRight);
  return rightLoop;
}

rightButton.onmousedown = moveRight;
rightButton.onmouseup = function () {
  window.cancelAnimationFrame(rightLoop);
}

Note: In terms of working out what position values to apply to the listener and panner, to make the sound appropriate to what the visuals are doing on screen, there is quite a bit of fiddly maths involved, but you will soon get used to it with a bit of experimentation.

Spécifications

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

Compatibilité navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support basique (Oui)webkit Actif seulement sur Nightly Pas de support Pas de support ?
Fonctionnalité Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Support basique Pas de support Actif seulement sur Nightly Pas de support Pas de support ?

Voir aussi

Étiquettes et contributeurs liés au document

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