¿Cómo reproducir un sonido de notificación en sitios web?


108

Cuando ocurre un evento determinado, quiero que mi sitio web reproduzca un sonido de notificación breve para el usuario.

El sonido no debería iniciarse automáticamente (instantáneamente) cuando se abre el sitio web. En su lugar, debe reproducirse a pedido a través de JavaScript (cuando ese evento ocurre).

Es importante que esto también funcione en navegadores más antiguos (IE6 y similares).

Entonces, básicamente hay dos preguntas:

  1. ¿Qué códec debo utilizar?
  2. ¿Cuál es la mejor práctica para incrustar el archivo de audio? ( <embed>vs. <object>vs. Flash vs. <audio>)

Respuestas:


98

Esta solución funciona en prácticamente todos los navegadores (incluso sin Flash instalado):

<!doctype html>
<html>
  <head>
    <title>Audio test</title>
    <script>
      /**
        * Plays a sound using the HTML5 audio tag. Provide mp3 and ogg files for best browser support.
        * @param {string} filename The name of the file. Omit the ending!
        */
      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>';
      }
    </script>
  </head>

  <body>
    <!-- Will try to play bing.mp3 or bing.ogg (depends on browser compatibility) -->
    <button onclick="playSound('bing');">Play</button>  
    <div id="sound"></div>
  </body>
</html>

Soporte de navegador

Códigos usados

  • MP3 para Chrome, Safari e Internet Explorer.
  • OGG para Firefox y Opera.

Buena respuesta. En este caso, el sonido se reproduce instantáneamente cuando se abre la página, pero supongo que muestra cómo, solo con fines de demostración.
Stefan

@ Stefan Eso es correcto pero puede resultar confuso. Eliminaré eso de mi respuesta. Gracias por la pista.
Timo

Muchas gracias por la solución @valmar
Jagdeep Singh

@DavidLarsson Porque hay algunos navegadores que no pueden leer ciertos códecs.
Timo

2
No pude hacerlo funcionar con mi versión de Internet Explorer 8.
Md. Arafat Al Mahmud

83

A partir de 2016, lo siguiente será suficiente (ni siquiera necesita incrustar):

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

Vea más aquí .


Y quizás también verifique si Audio está definido antes de hacer esto.
Christophe Roussy

1
Esta es una gran respuesta, muy simple y funciona perfectamente.
Polaris

3
Ya no funciona, lo tengoUncaught (in promise) DOMException
jack blank

2
Lo probé en la última versión de Chrome (versión 74.0.3729.169) y me funciona.
weltschmerz

funciona correctamente en Chrome, FF y Opera y es un enfoque mucho mejor que la respuesta aceptada, ya que esa respuesta sigue agregando la etiqueta de audio a la etiqueta de su cuerpo, ya que la secuencia de comandos de notificaciones probablemente se llamará en intervalos
Muhammad Omer Aslam

16

Un complemento más, para reproducir sonidos de notificación en sitios web: Ion.Sound

Ventajas:

  • Complemento de JavaScript para reproducir sonidos basados ​​en Web Audio API con respaldo a HTML5 Audio.
  • El complemento funciona en los navegadores de escritorio y móviles más populares y se puede usar en todas partes, desde sitios web comunes hasta juegos de navegador.
  • Soporte de audio-sprites incluido.
  • Sin dependencias (no se requiere jQuery).
  • 25 sonidos gratuitos incluidos.

Configurar complemento:

// 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");

4

¿Qué tal el reproductor multimedia de yahoo? Simplemente inserte la biblioteca de yahoo

<script type="text/javascript" src="http://mediaplayer.yahoo.com/js"></script> 

Y usarlo como

<a id="beep" href="song.mp3">Play Song</a>

Para iniciar automáticamente

$(function() { $("#beep").click(); });

También es una buena solución, pero ¿sería posible ocultar ese enlace? Creo que si lo configura display: none, ya no reproducirá el sonido. Además, la biblioteca de medios de Yahoo muestra un pequeño icono de "reproducción" a la izquierda del enlace.
Timo

@valmar: visiblity: hidden;es tu respuesta
Starx

3

Reproducir notificaciones compatibles con varios navegadores

Como lo aconsejó @Tim Tisdall de esta publicación, consulte el complemento Howler.js .

Los navegadores como Chrome deshabilitan la javascriptejecución cuando están minimizados o inactivos para mejorar el rendimiento . Pero esto reproduce sonidos de notificación incluso si el navegador está inactivo o minimizado por el usuario.

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

               sound.play();

La esperanza ayuda a alguien.


¿Cómo "Esto reproduce sonidos de notificación incluso si el navegador está inactivo o minimizado"? El sonido podría reproducirse si se llama cuando la página está inactiva, pero ¿cómo se sound.play()ejecuta el código que llama en primer lugar? ¿Howler pone todos tus setTimeouts en un contenedor?
más elegante

@poshest, no sé cómo se reproduce, puede estar verificando el código fuente o ponerse en contacto con el autor del complemento puede ayudarlo.
shaijut

1
OK gracias. Es solo que mencionó esta característica y vinculó esa otra respuesta de Stackoverflow, pero no se menciona como una característica en la documentación de Howler , así que pensé que sabía algo especial al respecto.
más elegante


2

si desea llamar al evento en el código, la mejor manera de hacerlo es crear un activador porque el navegador no responderá si el usuario no está en la página

<button type="button" style="display:none" id="playSoundBtn" onclick="playSound();"></button>

ahora puedes activar tu botón cuando quieras reproducir sonido

$('#playSoundBtn').trigger('click');


0

Podemos usar Audio y un objeto juntos como:

var audio = {};
audio['ubuntu'] = new Audio();
audio['ubuntu'].src="start.ogg";
audio['ubuntu'].play();

e incluso agregando addEventListenerpara playyended


0

Escribí un método funcional limpio para reproducir sonidos:

sounds = {
    test : new Audio('/assets/sounds/test.mp3')
};

sound_volume = 0.1;

function playSound(sound) {
    sounds[sound].volume = sound_volume;
    sounds[sound].play();
}
function stopSound(sound) {
    sounds[sound].pause();
}
function setVolume(sound, volume) {
    sounds[sound].volume = volume;
    sound_volume = volume;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.