141 votes

Comment faire en sorte que l'audio joue automatiquement sur chrome

La lecture automatique audio fonctionne dans Mozilla, Microsoft Edge et l'ancien Google Chrome, mais pas dans le nouveau Google Chrome.

Ils ont bloqué la lecture automatique. Y a-t-il un moyen de faire une lecture automatique audio dans Google Chrome ?

28 votes

Le fait que Google ait fait ça est absurde. Ils ont littéralement dit "eh bien, pas de musique pour votre jeu à moins qu'un utilisateur ne clique sur Play Music". Inacceptable. Je suis tellement en colère !

3 votes

@Hobbes D'accord. Il devrait au moins y avoir des exceptions. Comme je l'ai mentionné à un autre poster, j'ai une page "MUSIQUE", avec un lien de site "mymusic.html", auquel on ne peut accéder qu'avec un lien/bouton clairement intitulé "MA MUSIQUE". Il est assez absurde que quelqu'un aille sur cette page et soit surpris ou ennuyé par les échantillons de musique qui y sont diffusés. D'autant plus qu'il existe un bouton STOP MUSIC à position fixe. Cette politique est un cas de réaction excessive à des pratiques abusives.

6 votes

Randy, honnêtement, et je le dis en tant que musicien, je serait être ennuyé par la lecture d'échantillons de musique sans interaction sur une page "musique". Je m'attendrais à voir une liste de chansons, à choisir celle dont je veux écouter un extrait et à interagir avec elle pour l'écouter réellement.

133voto

AJB Points 497

Solution n° 1

Ma solution ici est de créer un iframe

<iframe src="audio/source.mp3" allow="autoplay" style="display:none" id="iframeAudio">
</iframe> 

y audio ainsi que pour les navigateurs non chromatiques

<audio autoplay loop  id="playAudio">
    <source src="audio/source.mp3">
</audio>

et dans mon script

  var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
  if (!isChrome){
      $('#iframeAudio').remove()
  }
  else {
      $('#playAudio').remove() // just to make sure that it will not have 2x audio in the background 
  }

Solution n°2 :

Selon @Leonard, il existe également une autre solution de contournement.

Créer un iframe qui ne joue rien juste pour déclencher l'autoplay au premier chargement.

<iframe src="silence.mp3" allow="autoplay" id="audio" style="display: none"></iframe>

bonne source pour le fichier mp3 silence.mp3

Vous pouvez ensuite lire votre fichier audio réel en toute simplicité.

<audio id="player" autoplay loop>
    <source src="audio/source.mp3" type="audio/mp3">
</audio>

Personnellement, je préfère solution n° 2 parce qu'il s'agit d'une approche plus propre pour ne pas dépendre autant de JavaScript.

Mise à jour : août 2019

Solution #3

Comme alternative, nous pouvons utiliser <embed>

Pour Firefox Il semble que la lecture automatique de l'audio fonctionne et que nous n'ayons pas besoin de l'option de lecture automatique de l'audio. <embed> car il créera un double parcours audio.

// index.js
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); // 120000 is the duration of your audio which in this case 2 mins.
}

De plus, si vous avez un événement de basculement pour votre audio, assurez-vous de supprimer l'événement créé. <embed> élément pour l'audio.

Note : Après votre basculement, il recommencera depuis le début parce que le bouton <embed> est déjà supprimé et le <audio> l'élément jouera normalement maintenant.

$(".toggle-audio").on('click', function(event) {
    audioPlaying = !audioPlaying;
    $("#background-audio").remove();

    clearInterval(backgroundAudio);
    if (audioPlaying){
        $(".audio1").play();
        // play audio 
    }
    else {
        $(".audio1").pause();
    }

Et maintenant assurez-vous de cacher ces <audio> y <embed> éléments

audio, embed {
    position: absolute;
    z-index: -9999;
}

Note : diplay: none y visibility: hidden fera le <embed> ne fonctionne pas.

0 votes

Comment faites-vous pour que l'audio tourne en boucle ?

1 votes

La solution 2 a fonctionné pour moi. Remarque : si vous travaillez pour le web et Phonegap en même temps, Phonegap n'a pas besoin de cette solution de contournement et la prend plutôt mal. Donc si vous avez une base de code commune pour le web et Phonegap, assurez-vous de trouver un moyen d'appliquer cette solution de contournement sur le web uniquement.

2 votes

Le lien vers le fichier de silence est mort, j'ai donc trouvé d'autres fichiers de silence sur GitHub : github.com/anars/blank-audio . J'utilise 1-second-of-silence.mp3 pour mon projet, mais n'importe quel fichier de cette collection pourrait fonctionner, je suppose.

32voto

Leonard Storcks Points 81

Il existe une astuce très astucieuse pour utiliser la fonction de lecture automatique de la balise audio dans Chrome.

Ajouter

<iframe src="silence.mp3" allow="autoplay" id="audio"></iframe>

alors que silence.mp3 seulement 0,5 seconde de silence.

Ce site

<audio id="player" autoplay controls><source src="0.mp3" type="audio/mp3"></audio>

travaille ensuite.

Chrome remarque qu'un son a été joué et donne l'autorisation de lecture automatique dans les balises audio.

15 votes

OK, même si cela fonctionne, on a l'impression d'exploiter un bogue, ou du moins un comportement involontaire. J'imagine que quelqu'un va le signaler à Google, donc je ne compterais pas longtemps sur son fonctionnement. Belle trouvaille cependant !

8 votes

Légèrement hors sujet, mais votre silence.mp3 est assez gros à 36.7k. Essayez ceci (216 octets) - s3-eu-west-1.amazonaws.com/neilbryson.net.random/silence.mp3

3 votes

Le lien silence.mp3 est mort. Vous vous pouvez créer votre propre .

25voto

deltran Points 89

Depuis avril 2018, les politiques de lecture automatique de Chrome ont changé :

"Les règles de lecture automatique de Chrome sont simples :

  • La lecture automatique en sourdine est toujours autorisée.

La lecture automatique avec son est autorisée si :

  • L'utilisateur a interagi avec le domaine (clic, tape, etc.).
  • Sur le bureau, le seuil de l'indice d'engagement médiatique de l'utilisateur a été franchi, ce qui signifie que l'utilisateur a déjà lu une vidéo avec du son.
  • Sur mobile, l'utilisateur a ajouté le site à son écran d'accueil.

Aussi

  • Les cadres supérieurs peuvent déléguer l'autorisation de lecture automatique à leurs iframes pour permettre la lecture automatique avec son. "

Le site des développeurs de Chrome contient plus d'informations, notamment des exemples de programmation, que vous pouvez consulter ici : https://developers.google.com/web/updates/2017/09/autoplay-policy-changes

9 votes

Vous dites donc qu'il n'y a pas moyen de faire une lecture automatique de l'audio dans le navigateur Chrome ?

1 votes

En outre, le navigateur Chrome sous Android dispose désormais d'une option d'autorisation permettant à l'utilisateur de choisir d'autoriser les sons en lecture automatique.

12voto

Manuel Alves Points 192

Il suffit d'ajouter ce petit script comme illustré dans https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio

<head>
<script>
window.onload = function() {
  var context = new AudioContext();
}
</script>
</head>

Alors cela fonctionnera comme vous le souhaitez :

<audio autoplay>
      <source src="hal_9000_sorry_dave.mp3">
</audio>

0 votes

Pouvez-vous m'envoyer un fiddle pour cette implémentation ? Cela m'aiderait beaucoup.

7 votes

Il ne fonctionne plus ? J'ai eu ce message : "L'AudioContext n'a pas été autorisé à démarrer. Il doit être repris (ou créé) après un geste de l'utilisateur sur la page. developers.google.fr/web/updates/2017/09/ "

2 votes

Fonctionne avec Chrome 81.0.4044.138 sur mac

11voto

Paul Becker Points 37

Au moins, tu peux utiliser ça :

document.addEventListener('click', musicPlay);
function musicPlay() {
    document.getElementById('ID').play();
    document.removeEventListener('click', musicPlay);
}

La musique démarre lorsque l'utilisateur clique n'importe où sur la page.

Il supprime aussi instantanément l'EventListener, donc si vous utilisez les contrôles audio, l'utilisateur peut couper le son ou mettre en pause et la musique ne recommence pas quand il clique ailleurs .

0 votes

Je pense qu'il s'agit là d'une bonne façon de respecter les nouvelles politiques qui exigent une certaine interaction de l'utilisateur pour lire de la musique. Je l'ai ajouté à l'événement tactile que j'ai déjà ajouté pour les navigateurs mobiles, et à un événement onscroll "qui fonctionne parfois". Malheureusement, la politique "no play()" ne semble pas considérer le défilement de la molette de la souris comme une interaction avec l'utilisateur, mais je travaille également sur ce point. Le fait est que ma page est une page MUSIQUE, littéralement appelée "mymusic.html", à laquelle on accède par un bouton MUSIQUE bien identifié. Donc, s'il y a une page qui justifie la lecture au chargement, c'est bien celle-là !

0 votes

@Randy Je suis dans une situation très similaire, je travaille sur une page de musique et je veux mettre en œuvre la lecture automatique. L'ajout de l'attribut autoplay fonctionne de manière très irrégulière - le même code fonctionne parfois, mais pas toujours. Je n'ai aucune erreur de console ou de réseau. Avez-vous résolu votre problème ?

0 votes

@LazarusRising - Bien que tout cela semble avoir commencé avec les navigateurs de téléphone, je remarque que les versions plus récentes des navigateurs de bureau rejettent également la lecture automatique. Je dois dire cependant que je suis satisfait de la nécessité d'avoir un événement déclenché par l'interaction de l'utilisateur pour lancer la musique. En fait, même moi, en tant qu'auteur de la page, je commence à être ennuyé par le fait qu'en allant sur ma page, la musique démarre juste parce que j'ai touché l'écran. Je commence à comprendre la logique de l'abandon progressif de la lecture automatique. Et comme cela commence à se produire universellement, je n'ai pas l'impression que mon site est le seul à ne pas pouvoir le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X