AudioContext suspendu après retour sur un jeu navigateur
Bonjour,
Je cherche une stratégie fiable pour reprendre le son après un changement de visibilité dans un jeu de navigateur.
Exemple reproductible : ARMCP Angel Arena
Scénario :
1. l’utilisateur démarre une session et le AudioContext passe bien à « running » ;
2. il change d’onglet pendant quelques secondes ;
3. au retour, le contexte reste parfois à « suspended » ;
4. appeler resume() depuis visibilitychange ou focus ne suffit pas toujours, car ces événements ne constituent pas un geste utilisateur.
J’ai donc essayé de mémoriser une demande de reprise, puis d’appeler audioContext.resume() lors du prochain pointerdown ou keydown. Cela fonctionne mieux, mais crée deux difficultés : les sons demandés entre-temps doivent être ignorés ou mis en file, et un double déclenchement peut arriver lorsque pointerdown et click se suivent.
Quelle architecture recommandez-vous pour centraliser cet état ? Faut-il écouter visibilitychange, pageshow et focus uniquement pour marquer « reprise nécessaire », puis effectuer une seule reprise sur le prochain geste utilisateur ? Comment éviter proprement la file de sons obsolètes et le double déclenchement sans recréer le AudioContext ?
Merci pour vos retours d’expérience sur Chrome, Firefox et Safari.