Reproducción de audio con Javascript?


Estoy haciendo un juego con HTML5 y Javascript.

¿Cómo puedo jugar al audio del juego a través de Javascript?

Author: Danny Beckett, 2012-02-23

13 answers

Si no quieres meterte con elementos HTML:

var audio = new Audio('audio_file.mp3');
audio.play();

Esto utiliza el HTMLAudioElement interfaz, que reproduce audio de la misma manera que el <audio> elemento .

Si necesitas más funcionalidad, usé el aullador .js biblioteca y lo encontró simple y útil.

 998
Author: Uri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-02 13:40:25

Es fácil, simplemente obtenga su elemento audio y llame al método play():

document.getElementById('yourAudioTag').play();

Mira este ejemplo: http://www.storiesinflight.com/html5/audio.html

Este sitio descubre algunas de las otras cosas interesantes que puede hacer, como load(), pause(), y algunas otras propiedades del elemento audio.

 163
Author: shanabus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-16 04:50:37

Http://www.schillmania.com/projects/soundmanager2 /

SoundManager 2 proporciona una API fácil de usar que permite reproducir sonido en cualquier navegador moderno, incluido IE 6+. Si el navegador no es compatible con HTML5, entonces recibe ayuda de Flash. Si quieres estrictamente HTML5 y sin flash, hay una configuración para eso, preferFlash=false

Es compatible con audio 100% libre de Flash en iPad, iPhone (iOS4) y otros dispositivos habilitados para HTML5 + navegadores

El uso es tan simple as:

<script src="soundmanager2.js"></script>
<script>
    // where to find flash SWFs, if needed...
    soundManager.url = '/path/to/swf-files/';

    soundManager.onready(function() {
        soundManager.createSound({
            id: 'mySound',
            url: '/path/to/an.mp3'
        });

        // ...and play it
        soundManager.play('mySound');
    });
</script>

Aquí hay una demostración de ello en acción: http://www.schillmania.com/projects/soundmanager2/demo/christmas-lights /

 35
Author: LordZardeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-23 18:58:36

Esta es una pregunta bastante antigua, pero quiero agregar información útil. El iniciador del tema ha mencionado que es "making a game". Así que para todos los que necesitan audio para el desarrollo de juegos hay una mejor opción que solo una etiqueta <audio> o un HTMLAudioElement. Creo que deberías considerar el uso de la API Web Audio :

Mientras que el audio en la web ya no requiere un plugin, la etiqueta de audio trae limitaciones significativas para la implementación de juegos sofisticados y aplicaciones interactivas. web Audio API es una API JavaScript de alto nivel para procesar y sintetizar audio en aplicaciones web. El objetivo de esta API es incluir las capacidades que se encuentran en los motores de audio de juegos modernos y algunas de las tareas de mezcla, procesamiento y filtrado que se encuentran en las aplicaciones modernas de producción de audio de escritorio.

 25
Author: Konstantin Smolyanin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-30 20:09:04

Fácil con Jquery

/ / establecer etiquetas de audio sin precarga

<audio class="my_audio" controls preload="none">
    <source src="audio/my_song.mp3" type="audio/mpeg">
    <source src="audio/my_song.ogg" type="audio/ogg">
</audio>

/ / añadir jquery para cargar

$(".my_audio").trigger('load');

/ / métodos de escritura para reproducir y detener

function play_audio(task) {
      if(task == 'play'){
           $(".my_audio").trigger('play');
      }
      if(task == 'stop'){
           $(".my_audio").trigger('pause');
           $(".my_audio").prop("currentTime",0);
      }
 }

/ / decide cómo controlar el audio

<button onclick="play_audio('play')">PLAY</button>
<button onclick="play_audio('stop')">STOP</button>

EDITAR

Para responder a la pregunta de @stomy, aquí está cómo usarías este enfoque para reproducir una lista de reproducción :

Establece tus canciones en un objeto:

playlist = {
    'song_1' : 'audio/splat.mp3',
    'song_2' : 'audio/saw.mp3',
    'song_3' : 'audio/marbles.mp3',
    'song_4' : 'audio/seagulls.mp3',
    'song_5' : 'audio/plane.mp3'
}

Utilice las funciones de gatillo y reproducción como antes:

$(".my_audio").trigger('load');

function play_audio(task) {
      if(task == 'play'){
           $(".my_audio").trigger('play');
      }
      if(task == 'stop'){
           $(".my_audio").trigger('pause');
           $(".my_audio").prop("currentTime",0);
      }
 }

Carga la primera canción dinámicamente:

keys = Object.keys(playlist);
$('.my_audio').append("<source id='sound_src' src=" + playlist[keys[0]] + " type='audio/mpeg'>");

Restablecer la fuente de audio a la siguiente canción en la lista de reproducción, cuando la canción actual termina:

count = 0; 
$('.my_audio').on('ended', function() { 
   count++;  
   $("#sound_src").attr("src", playlist[keys[count]])[0];
   $(".my_audio").trigger('load');
   play_audio('play');
});

Ver aquí para un ejemplo de este código en acción.

 17
Author: Cybernetic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-03 04:06:07
new Audio('./file.mp3').play()
 9
Author: Maxmaxmaximus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-01 07:07:15

Agregue un audio oculto y reprodúzcalo.

function playSound(url){
  var audio = document.createElement('audio');
  audio.style.display = "none";
  audio.src = url;
  audio.autoplay = true;
  audio.onended = function(){
    audio.remove() //Remove when played.
  };
  document.body.appendChild(audio);
}
 8
Author: Rey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-05 19:51:34

Solución bastante simple si tienes una etiqueta HTML como la siguiente:

<audio id="myAudio" src="some_audio.mp3"></audio>

Solo usa JavaScript para reproducirlo, así:

document.getElementById('myAudio').play();
 5
Author: Ben Stafford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-25 06:56:17

Si está recibiendo el siguiente error:

Uncaught (in promise) DOMException: play() falló porque el usuario no interactuó con el documento primero.

Eso significa que el usuario necesita interactuar primero con el sitio web (como dice el mensaje de error). En este caso, debe usar click o simplemente otro receptor de eventos, para que el usuario pueda interactuar con su sitio web.

Si desea cargar automáticamente el audio y no desea que el usuario interactúe con el documento primero, puedes usar setTimeout.

setTimeout(() => {
  document.getElementById('mySound').play();
}, 500)
<audio id="mySound" src="sound.mp3"></audio>

El sonido comenzará después de 0,5 segundos.

 4
Author: Reza Saadati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-02 15:53:47

Usé este método para reproducir un sonido...

var audioElement;
if(!audioElement) {
  audioElement = document.createElement('audio');
  audioElement.innerHTML = '<source src="' + '/audio/sound.mp3'+ '" type="audio/mpeg" />'
}
audioElement.play();
 2
Author: Bilal Soomro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-05 02:19:54

Si desea reproducir su audio cada vez que se abre la página, haga lo siguiente.

<script>
  function playMusic(){
  music.play();
  }
  </script>
<html>
  <audio id="music" loop src="sounds/music.wav" autoplay> </audio>
  </html>

Y llama a esta playMusic() cuando lo necesites en tu código de juego.

 2
Author: Suhani Mendapara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-09 10:26:35
var song = new Audio();
song.src = 'file.mp3';
song.play();
 2
Author: mamadaliev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-28 23:53:31

Puede utilizar la API de Audio web para reproducir sonidos. Hay bastantes bibliotecas de audio por ahí como Howler.js, soundjs etc. Si no se preocupa por los navegadores antiguos, también puede verificar http://musquitojs.com / . Proporciona una sencilla API para crear y reproducir sonidos.

Por ejemplo, para reproducir un sonido todo lo que tienes que hacer es.

import $buzz from 'musquito';

const buzz = $buzz('gunfire.mp3');

buzz.play();

La biblioteca también soporta Sprites de Audio.

 2
Author: VJAI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-25 15:52:54