Des balises <audio> cassées IOS13 ont-elles été utilisées comme tampons audio connectés au contexte audio?

9

Nous développons actuellement un site Web qui permet aux utilisateurs de lire de simples balises audio connectées à l'audiocontext. Nous sommes conscients des problèmes techniques avec IOS tels que la lecture initiée par des gestes utilisateur. Tout fonctionne bien jusqu'à IOS12. Maintenant que IOS13 est sorti, plus rien ne fonctionne.

Il fonctionne sur tous les ordinateurs de bureau, Android et IOS jusqu'à IOS13.

Une idée sur ce qui se passe?

Il n'y a aucun message d'erreur dans la console lors du débogage avec Safari sur le bureau connecté à l'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
la source
1
L'application Mine a également été cassée. Mais je vois que vous créez un contexte audio avant de cliquer, ce n'était pas autorisé dans iOS 12 aussi.
shukshin.ivan
La audioContext.resume();ligne devrait s'occuper de cela, mais je pense que ce qui suit devrait être dans la résolution de la promesse, comme ceci: audioContext.resume (). Then (function () {player.play () playbutton.innerHTML = "Pause"; playStatus = 'isPlaying';}
Paulie
J'ai déjà ajouté la promesse dans le codepen. Mais avec ou sans promesse, cela change quoi que ce soit.
JohnLoyd
J'ai le même problème. La seule différence est que la balise audio est rendue dynamiquement dans une application d'une seule page. Je l'ai fait fonctionner partiellement en créant du srcstatique avec une URL complète. Cependant, cela ne fonctionne que si vous quittez Safari, puis l'ouvrez à nouveau. Comportement très étrange.
Pantalon

Réponses:

2

Malheureusement, il AudioContext.createMediaElementSourcea été rompu depuis la sortie d'iOS 13. Le bug aurait été corrigé dans Safari Technology Preview 99 : https://bugs.webkit.org/show_bug.cgi?id=203435 , mais il est toujours cassé dans la récente la sortie d'iOS, donc un nouveau rapport de bogue a été déposé qui peut être trouvé ici: https://bugs.webkit.org/show_bug.cgi?id=211394

Jordy van Dortmont
la source
Il semble que les développeurs de webkit l'ont corrigé il y a quelques jours, cependant, je rencontre toujours le problème sur la dernière version d'iOS. Est-ce que ça va être corrigé avec la prochaine version d'ios ou de webkit? Je suis confus.
Parapluie
@ Umbrella J'ai édité ma réponse avec les dernières mises à jour.
Jordy van Dortmont il y a
0

Ce problème a été signalé par erreur comme corrigé dans iOS 13.3.1 (28 janvier 2020). Néanmoins, comme tout le monde peut le lire à partir de ce rapport de bogue WebKit 203435 , le problème persiste au 7 avril 2020, date de sortie d'iOS 13.4.1.

Le rapport de bogue ne fournit aucune autre information concernant la date estimée à laquelle ce bogue va être corrigé. Malheureusement, 80% des utilisateurs d'iOS (environ 14% du marché mobile total, selon Statcounter) ont été par erreur incapables d'utiliser WebAudio sur leurs appareils depuis des mois.

Ce qui aggrave les choses pour nous, les développeurs, c'est que Safari ne signale aucune erreur. Ainsi, même essayer d'imaginer un repli n'est pas possible ou très difficile de toute façon.

Luigi Pulcini
la source