Estoy tratando de reproducir un archivo de audio:
path = '/public/recordings/weekday/1.mp3' const audio = new Audio(path) audio.play()Si la ruta NO es válida, aparece la siguiente advertencia en la consola:
Uncaught (in promise) DOMException: Failed to load because no supported source was found.
¿Existe un método de javascript para verificar si el archivo existe para que pueda evitar llamar al juego?
Me imagino que la respuesta podría estar en este documento:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canPlayType
Encontré una solución pero NO me gusta:
audio.addEventListener('error', function (err) { if (err.path[0].error.message.includes('DEMUXER_ERROR_COULD_NOT_OPEN')) { this.handleError() } else { this.handleSomeOtherError() } }.bind(this), false)Usar una promesa ayudó:
const playPromise = this.audio.play(); if (playPromise !== undefined) { playPromise.then(function() { console.log('Automatic playback started!!') }).catch(function(error) { console.log(error) this.handleError() }.bind(this), false); }Tíralo en una promesa.
function Function() { path = 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3'; var audio = new Audio(path); var playPromise = audio.play(); if (playPromise !== undefined) { playPromise.then(_ => { audio.setAttribute("controls", "controls"); document.body.appendChild(audio); audio.play(); }) } } <button onclick="Function()">Try it</button>