2012-04-09 24 views
8

En un juego HTML5 que estoy haciendo, toco un sonido "sordo" cuando las cosas chocan. Sin embargo, es un poco irreal. No importa la velocidad de los objetos, siempre emitirán el mismo sonido de "ruido sordo" relativamente fuerte. Lo que me gustaría hacer es hacer que el volumen de ese sonido dependa de la velocidad, pero ¿cómo hago eso? Solo sé cómo reproducir un sonido.¿Cómo configurar el volumen del audio HTML5?

playSound = function(id) 
{ 
    sounds[id].play(); 
} 

sounds es una matriz completa de new Audio("url") 's.

+0

posible duplicado http://stackoverflow.com/questions/1933969/sound-effects-in-javascript-html5 – coder

+0

No es que yo creer. – corazza

Respuesta

16

Utilice la propiedad de volumen del elemento de audio. De W3:

The element's effective media volume is volume, interpreted relative to the range 0.0 to 1.0, with 0.0 being silent, and 1.0 being the loudest setting, values in between increasing in loudness. The range need not be linear. The loudest setting may be lower than the system's loudest possible setting; for example the user could have set a maximum volume.

Ex: sounds[id].volume=.5;

+0

'sonidos [id] .volume (vol)' da "TypeError no detectada: 'volumen' Propiedad del objeto # no es una función" – corazza

+1

Vaya, errata en mi código. Corregido – j08691

+0

Bueno, parece extraño. ;) Funciona, gracias! – corazza

4

Es posible ajustar el volumen mediante el establecimiento de:

setVolume = function(id,vol) { 
    sounds[id].volume = vol; // vol between 0 and 1 
} 

Sin embargo, tenga en cuenta que hay un pequeño retraso entre el volumen que se definan y está tomando efecto. Puede escuchar el sonido comenzar a tocar en el volumen anterior, luego saltar al nuevo.

+0

¡Gracias por la respuesta y por la sugerencia, +1! ¿Qué tan grande es la pausa por lo general? Mi sonido es en su mayoría de <1 segundo de duración, ¿eso presentará problemas? – corazza

3

Incluso puede jugar con la ganancia y hacer que el volumen se escuche más alto que el 100%. Puede utilizar esta función para amplificar el sonido:

function amplifyMedia(mediaElem, multiplier) { 
    var context = new (window.AudioContext || window.webkitAudioContext), 
     result = { 
     context: context, 
     source: context.createMediaElementSource(mediaElem), 
     gain: context.createGain(), 
     media: mediaElem, 
     amplify: function(multiplier) { result.gain.gain.value = multiplier; }, 
     getAmpLevel: function() { return result.gain.gain.value; } 
     }; 
    result.source.connect(result.gain); 
    result.gain.connect(context.destination); 
    result.amplify(multiplier); 
    return result; 
} 

que podría hacer algo como esto para ajustar la amplificación inicial de 100%:

var amp = amplifyMedia(sounds[id], 1); 

Entonces, si usted necesita el sonido para ser dos veces más fuerte se podría hacer algo como esto:

amp.amplify(2); 

Si quieres la mitad se le puede hacer esto:

amp.amplify(0.5); 

Un total de escritura de la función se encuentra aquí: http://cwestblog.com/2017/08/17/html5-getting-more-volume-from-the-web-audio-api/

Cuestiones relacionadas