es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo solucionar una promesa no capturada de audio?

Básicamente tengo este código JavaScript que presenta múltiples audios como se muestra a continuación.

var audio = [];

audio["blue"] = new Audio("piano-blue.wav.mp3");
audio["red"] = new Audio("piano-red.wav.mp3");

Utilizo el audio para que se escuche cuando se hace clic en una imagen específica.

         document.querySelector(".red-wheel").addEventListener("click", () => {
            document.querySelector(".red-wheel").innerHTML = "<img src='red-light.svg.svg'>";
            setTimeout(setWheels, 500);
            console.log("red");
            playColor("red");
      });

      document.querySelector(".blue-wheel").addEventListener("click", () => {
          document.querySelector(".blue-wheel").innerHTML = "<img src='blue-light.svg.svg'>";
          setTimeout(setWheels, 500);
          console.log("blue");
          playColor("blue");
      });

La función playColour() se presenta a continuación.

 function playColor(color) {
            audio[color].load();
            audio[color].play();
        }

Al revisar el resultado, se escucha el sonido, lo cual es genial, pero se encuentra un error: Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el error Uncaught (in promise) DOMException: The play() request was interrupted by a new load request. puedes modificar la función playColor() para comprobar si el audio ya se está reproduciendo o no. Si se está reproduciendo, debes detenerlo y cargar de nuevo el audio antes de reproducirlo. Así es como puedes modificar la función playColor():

    function playColor(color) {
        if(audio[color].paused) {
            audio[color].play();
        } else {
            audio[color].currentTime = 0;
            audio[color].pause();
            audio[color].load();
            audio[color].play();
        }
    }
    

    Este código comprueba si el audio del color dado está en pausa o no. Si está en pausa, comienza a reproducirlo. Si ya se está reproduciendo, se detiene, se vuelve a cargar el audio y se vuelve a reproducir. Esto debería evitar que ocurra el error Uncaught (in promise) DOMException.

Comments are closed.