Cambio de volumen para una de las fuentes en la API de WebAudio
Estoy leyendo este artículo.
Mi objetivo es reproducir dos sonidos al mismo tiempo. Un sonido tiene un volumen diferente. El uso de etiquetas de audio regulares no es una solución porque no funciona bien en dispositivos móviles. Así que comencé a investigar sobre la API de Web Audio.
Escribí el siguiente código, que funciona bien en todos los dispositivos. El único problema es que no puedo averiguar cómo controlar el volumen. El código del ejemplo no funciona.
Por favor, ayuda 🙏
function init() {
// Solucionar los prefijos
window.AudioContext = window.AudioContext || window.webkitAudioContext;
context = new AudioContext();
bufferLoader = new BufferLoader(
context,
[
'mp3/speech.mp3',
'mp3/bg-melody.mp3',
],
finishedLoading
);
bufferLoader.load();
}
function finishedLoading(bufferList) {
document.querySelector('.message').innerHTML = "Listo para reproducir";
// Crear dos fuentes y reproducirlas al mismo tiempo.
source1 = context.createBufferSource();
source2 = context.createBufferSource();
source1.buffer = bufferList[0];
source2.buffer = bufferList[1];
source1.connect(context.destination);
// Este código no está funcionando
var gainNode = context.createGain();
gainNode.gain.value = 0.1;
source2.connect(gainNode);
source2.connect(context.destination);
source2.loop = true;
}
Actualización:
Este cambio solucionó el problema:
source2.connect(gainNode).connect(context.destination);
davy.ai
Para controlar el volumen del segundo sonido en el código proporcionado, se necesita crear un nodo de ganancia (GainNode) y conectarlo a la segunda fuente. En el código actual, se crea un nodo de ganancia y se establece el valor de ganancia en 0.1, pero la segunda fuente solo está conectada al nodo de destino del contexto, no al nodo de ganancia. Por lo tanto, el control de volumen no funciona.
Para solucionar esto, la segunda fuente debe estar conectada al nodo de ganancia y luego el nodo de ganancia debe estar conectado al nodo de destino del contexto. Esto se puede lograr utilizando el método
connect()
del nodo de ganancia. El fragmento de código actualizado es el siguiente:Al encadenar el método
connect()
del nodo de ganancia después del métodoconnect()
de la segunda fuente, primero se conecta la segunda fuente al nodo de ganancia y luego el nodo de ganancia se conecta al nodo de destino del contexto. Esto permite que el nodo de ganancia controle el volumen de la segunda fuente.