143 votes

Comment faire jouer un son de notification sur les sites web ?

Lorsqu'un certain événement se produit, je veux que mon site Web émette une courte notification sonore à l'intention de l'utilisateur.

Le son doit pas se lancer automatiquement (instantanément) à l'ouverture du site Web. Au lieu de cela, il doit être lu à la demande via JavaScript (lorsque cet événement précis se produit).

Il est important que cela fonctionne également sur les anciens navigateurs (IE6 et autres).

Donc, en fait, il y a deux questions :

  1. Quel codec dois-je utiliser ?
  2. Quelle est la meilleure pratique pour intégrer le fichier audio ? ( <embed> vs. <object> vs. Flash vs. <audio> )

0 votes

Vous pouvez essayer github.com/VJAI/musquito

178voto

Timo Points 2412

Solution 2021

function playSound(url) {
  const audio = new Audio(url);
  audio.play();
}

<button onclick="playSound('https://your-file.mp3');">Play</button>  

Support des navigateurs

Edge 12+, Firefox 20+, Internet Explorer 9+, Opera 15+, Safari 4+, Chrome

Support des codecs

Utilisez simplement le MP3


Ancienne solution

(pour les anciens navigateurs)

function playSound(filename){
  var mp3Source = '<source src="' + filename + '.mp3" type="audio/mpeg">';
  var oggSource = '<source src="' + filename + '.ogg" type="audio/ogg">';
  var embedSource = '<embed hidden="true" autostart="true" loop="false" src="' + filename +'.mp3">';
  document.getElementById("sound").innerHTML='<audio autoplay="autoplay">' + mp3Source + oggSource + embedSource + '</audio>';
}

<button onclick="playSound('bing');">Play</button>  
<div id="sound"></div>

Support des navigateurs

Codes utilisés

  • MP3 pour Chrome, Safari et Internet Explorer.
  • OGG pour Firefox et Opera.

0 votes

Belle réponse. Dans ce cas, cependant, le son est joué instantanément à l'ouverture de la page - mais je suppose que vous avez montré comment, juste pour la démonstration.

0 votes

@Stefan C'est correct mais cela peut prêter à confusion. Je vais retirer cela de ma réponse. Merci pour l'astuce.

1 votes

Merci beaucoup pour la solution @valmar

90voto

Charles Points 3434

Depuis 2016, les éléments suivants suffisent (il n'est même pas nécessaire de les intégrer) :

let src = 'https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3';
let audio = new Audio(src);
audio.play();

Voir plus ici .

0 votes

Et peut-être aussi vérifier si Audio est défini avant de faire cela.

1 votes

C'est une excellente réponse, si simple et qui fonctionne parfaitement.

9 votes

Ça ne marche plus, je reçois Uncaught (in promise) DOMException

18voto

Cassio Landim Points 952

Un autre plugin, pour jouer des sons de notification sur les sites web : Ion.Sound

Avantages :

  • Plugin JavaScript pour la lecture de sons basés sur l'API audio Web, avec repli sur l'audio HTML5.
  • Le plugin fonctionne sur les navigateurs de bureau et mobiles les plus populaires et peut être utilisé partout, des sites Web courants aux jeux par navigateur.
  • Support audio-sprites inclus.
  • Aucune dépendance (jQuery n'est pas nécessaire).
  • 25 sons gratuits inclus.

Configurer le plugin :

// set up config
ion.sound({
    sounds: [
        {
            name: "my_cool_sound"
        },
        {
            name: "notify_sound",
            volume: 0.2
        },
        {
            name: "alert_sound",
            volume: 0.3,
            preload: false
        }
    ],
    volume: 0.5,
    path: "sounds/",
    preload: true
});

// And play sound!
ion.sound.play("my_cool_sound");

0 votes

Comment importer un fichier js ? !

1 votes

Lire la section "Utilisation" de github.com/IonDen/ion.sound documentation. @joseph-ali

5voto

stom Points 2477

Jouer des notifications compatibles avec les différents navigateurs

Comme conseillé par @Tim Tisdall de ce poste, chèque Howler.js Plugin.

Les navigateurs comme chrome désactivent javascript exécution lorsqu'elle est minimisée ou inactive pour performance améliorations. Mais il émet des sons de notification même si le navigateur est inactif ou réduit par l'utilisateur.

  var sound =new Howl({
                     src: ['../sounds/rings.mp3','../sounds/rings.wav','../sounds/rings.ogg',
                           '../sounds/rings.aiff'],
                     autoplay: true,
                     loop: true
                    });

               sound.play();

J'espère que cela aidera quelqu'un.

0 votes

Que signifie l'expression "Ce système émet des sons de notification même si le navigateur est inactif ou réduit" ? Le son peut être joué s'il est appelé lorsque la page est endormie, mais comment le code qui appelle le son de notification peut-il être utilisé ? sound.play() en premier lieu ? Est-ce que Howler place tous vos setTimeouts dans un wrapper ?

0 votes

@poshest , je ne sais pas comment cela fonctionne, peut-être que vérifier le code source ou contacter l'auteur du plugin peut vous aider.

1 votes

OK, merci. C'est juste que vous avez mentionné cette fonctionnalité et fait le lien avec l'autre réponse de Stackoverflow, mais elle n'est pas mentionnée en tant que fonctionnalité dans le document de référence. Documentation sur Howler alors j'ai pensé que tu savais quelque chose de spécial à ce sujet.

5voto

Phill Alexakis Points 1325

Si vous souhaitez automatiser le processus via JS :

Inclure quelque part dans le html :

<button onclick="playSound();" id="soundBtn">Play</button>  

et le cacher via js :

<script type="text/javascript">

document.getElementById('soundBtn').style.visibility='hidden';

function performSound(){
var soundButton = document.getElementById("soundBtn");
soundButton.click();
}

function playSound() {
      const audio = new Audio("alarm.mp3");
      audio.play();
    }

</script>

si vous voulez jouer le son, il suffit d'appeler performSound() quelque part !

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