¿IOS13 ha roto las etiquetas <audio> utilizadas como buffers de audio conectados al contexto de audio?

9

Actualmente estamos desarrollando un sitio web que permite a los usuarios reproducir etiquetas de audio simples conectadas al audiocontexto. Somos conscientes de problemas técnicos con IOS, como la reproducción iniciada por gestos del usuario. Todo funciona bien hasta IOS12. Ahora que IOS13 está fuera, ya nada funciona.

Funciona en todos los escritorios, Android e IOS hasta IOS13.

¿Alguna idea de lo que está pasando?

No hay mensajes de error en la consola al depurar con Safari en el escritorio conectado al iPhone.

https://codepen.io/gchad/pen/WNNvzzd

<!DOCTYPE html>
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<body>

<div>
  <h1>Play Audio Tag connected to audio context</h1>
  <div id="playbutton" style="width:100px; height:100px; background:blue; color:white; margin:auto; text-align: center; font-size: 30px; cursor: pointer;">
    Play
  </div>

  <audio  id="myPlayer" crossorigin="anonymous" >
    <source src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/858/outfoxing.mp3"/>
      <!--http://commondatastorage.googleapis.com/codeskulptor-assets/week7-brrring.m4a-->
  </audio> 
</div>

<script>

var player = document.getElementById('myPlayer'),
playbutton = document.getElementById('playbutton'),
playStatus = 'paused';

var audioContext = new(window.AudioContext || window.webkitAudioContext)();
var audioSource = audioContext.createMediaElementSource(player); 
audioSource.connect(audioContext.destination); 

playbutton.addEventListener('click',function(ev){

  if( playStatus == 'paused'){

    audioContext.resume();
    player.play();
    playbutton.innerHTML = "Pause";
    playStatus = 'isPlaying';

  } else {

      player.pause();
      playbutton.innerHTML = "Play";
      playStatus = 'paused';
  }
});
</script>

</body>

JohnLoyd
fuente
1
La aplicación mía también se ha roto. Pero veo que creas un contexto de audio antes de hacer clic, tampoco estaba permitido en iOS 12.
shukshin.ivan
La audioContext.resume();línea debería ocuparse de eso, pero creo que lo que sigue debe estar en la resolución de la promesa, así: audioContext.resume (). Luego (function () {player.play () playbutton.innerHTML = "Pause"; playStatus = 'isPlaying';}
Paulie
Ya agregué la promesa en el codepen. Pero con o sin promesa, cambia cualquier cosa.
JohnLoyd el
Tengo el mismo problema. La única diferencia es que la etiqueta de audio se representa dinámicamente en una aplicación de página única. Lo hice funcionar parcialmente haciendo la srcestática con una URL completa. Sin embargo, solo funciona si abandonas Safari y luego lo vuelves a abrir. Comportamiento muy extraño.
Pantalones

Respuestas:

2

Desafortunadamente, AudioContext.createMediaElementSourcese ha roto desde el lanzamiento de iOS 13. Se informó que el error se solucionó en Safari Technology Preview 99 : https://bugs.webkit.org/show_bug.cgi?id=203435 , pero todavía está roto en el reciente lanzamiento de iOS, por lo que se presentó un nuevo informe de errores que se puede encontrar aquí: https://bugs.webkit.org/show_bug.cgi?id=211394

Jordy van Dortmont
fuente
Parece que los desarrolladores de webkit lo arreglaron hace unos días, sin embargo, todavía estoy experimentando el problema en la última versión de iOS. ¿Se solucionará con la próxima versión de ios o webkit? Estoy confundido.
Paraguas
@Umbrella He editado mi respuesta con las últimas actualizaciones.
Jordy van Dortmont
0

Este problema se informó erróneamente como solucionado en iOS 13.3.1 (28 de enero de 2020). Sin embargo, como cualquiera puede leer en este informe de error de WebKit 203435 , el problema sigue existiendo a partir del 7 de abril de 2020, la fecha de lanzamiento de iOS 13.4.1.

El informe de error no proporciona más información con respecto a la fecha estimada en que se solucionará este error. Lamentablemente, el 80% de los usuarios de iOS (aproximadamente el 14% del mercado móvil total, según Statcounter) han estado incapacitados por error de usar WebAudio en sus dispositivos durante meses.

Lo que empeora las cosas para nosotros los desarrolladores es que Safari no informa ningún error. Por lo tanto, incluso tratar de imaginar un retroceso no es posible o muy difícil de todos modos.

Luigi Pulcini
fuente