O IOS13 quebrou as tags <audio> usadas como buffers de áudio conectados ao contexto de áudio?

9

Atualmente, estamos desenvolvendo um site que permite que os usuários reproduzam tags de áudio simples conectadas ao contexto de áudio. Estamos cientes de problemas técnicos com o IOS, como a reprodução iniciada por gestos do usuário. Tudo está funcionando bem até o IOS12. Agora que o IOS13 saiu, nada funciona mais.

Ele funciona em todos os desktops, Android e IOS até o IOS13.

Alguma idéia do que está acontecendo?

Não há mensagens de erro no console ao depurar com o Safari on Desktop conectado ao 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
fonte
11
O meu aplicativo também foi quebrado. Mas vejo que você cria um contexto de áudio antes de clicar, também não era permitido no iOS 12.
shukshin.ivan
A audioContext.resume();linha deve cuidar disso, mas acho que o que se segue deve estar na promessa de resolver, assim: audioContext.resume (). Then (function () {player.play () playbutton.innerHTML = "Pause"; playStatus = 'isPlaying';}
Paulie
Eu já adicionei a promessa no codepen. Mas com ou sem promessa, isso muda alguma coisa.
21919 JohnLoyd
Eu tenho o mesmo problema. A única diferença é que a tag de áudio é renderizada dinamicamente em um aplicativo de página única. Eu consegui trabalhar parcialmente, tornando a srcestática com um URL completo. No entanto, ele só funciona se você sair do Safari e depois abri-lo novamente. Comportamento muito estranho.
Pants

Respostas:

2

Infelizmente, AudioContext.createMediaElementSourceestá quebrado desde o lançamento do iOS 13. O bug foi corrigido: https://bugs.webkit.org/show_bug.cgi?id=203435 . Está no Safari Technology Preview 99 .

Jordy van Dortmont
fonte
Parece que os desenvolvedores do webkit o corrigiram alguns dias atrás, no entanto, ainda estou enfrentando o problema na versão mais recente do iOS. Será corrigido com a próxima versão do ios ou versão do webkit? Estou confuso.
Umbrella
0

Este problema foi relatado por engano como corrigido no iOS 13.3.1 (28 de janeiro de 2020). No entanto, como qualquer pessoa pode ler neste relatório de bug do WebKit 203435 , o problema ainda está presente em 7 de abril de 2020, data de lançamento do iOS 13.4.1.

O relatório de bug não fornece mais informações sobre a data estimada em que esse bug será corrigido. Infelizmente, 80% dos usuários de iOS (cerca de 14% do mercado total de dispositivos móveis, de acordo com a Statcounter) estão equivocadamente incapazes de usar o WebAudio em seus dispositivos há meses, agora.

O que piora as coisas para nós desenvolvedores é que o Safari não relata nenhum erro. Portanto, mesmo tentando imaginar um fallback não é possível ou muito difícil.

Luigi Pulcini
fonte