Solución # 1
Mi solución aquí es crear un iframe
<iframe src="audio/source.mp3" allow="autoplay" style="display:none" id="iframeAudio">
</iframe>
y audio
etiquetar también para navegadores que no sean Chrome
<audio autoplay loop id="playAudio">
<source src="audio/source.mp3">
</audio>
y en mi script
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
if (!isChrome){
$('#iframeAudio').remove()
}
else {
$('#playAudio').remove()
}
Solución # 2:
También hay otra solución para esto según @Leonard
Cree un iframe
que no reproduzca nada solo para activar la reproducción automática en la primera carga.
<iframe src="silence.mp3" allow="autoplay" id="audio" style="display: none"></iframe>
buena fuente para el archivo mp3 silent.mp3
Luego, reproduce tu archivo de audio real a gusto.
<audio id="player" autoplay loop>
<source src="audio/source.mp3" type="audio/mp3">
</audio>
Personalmente, prefiero la solución n. ° 2 porque es un enfoque más limpio para no depender tanto de JavaScript.
Actualización de agosto de 2019
Solución # 3
Como alternativa podemos utilizar <embed>
Para Firefox
Parece que la reproducción automática de audio está funcionando, por lo que no necesitamos el <embed>
elemento porque creará una doble ejecución de audio.
let audioPlaying = true,
backgroundAudio, browser;
browser = navigator.userAgent.toLowerCase();
$('<audio class="audio1" src="audio.mp3" loop></audio>').prependTo('body');
if (!browser.indexOf('firefox') > -1) {
$('<embed id="background-audio" src="audio.mp3" autostart="1"></embed>').prependTo('body');
backgroundAudio = setInterval(function() {
$("#background-audio").remove();
$('<embed id="background-audio" src="audio.mp3"></embed>').prependTo('body');
}, 120000);
}
Además, si tiene un evento de alternancia para su audio, asegúrese de eliminar el <embed>
elemento creado para el audio.
Nota: Después de su alternancia, se reiniciará desde el principio porque <embed>
ya se eliminó y el <audio>
elemento se reproducirá normalmente ahora.
$(".toggle-audio").on('click', function(event) {
audioPlaying = !audioPlaying;
$("#background-audio").remove();
clearInterval(backgroundAudio);
if (audioPlaying){
$(".audio1").play();
}
else {
$(".audio1").pause();
}
Y ahora asegúrate de ocultar estos <audio>
y <embed>
elementos
audio, embed {
position: absolute;
z-index: -9999;
}
Nota: diplay: none
y visibility: hidden
hará que el <embed>
elemento no funcione.