858 votes

Comment lire l'audio ?

Je réalise un jeu avec HTML5 et JavaScript.

Comment puis-je lire le son du jeu via JavaScript ?

13 votes

Puisque c'est html5, il y a <audio> . Cet élément sera doté de crochets JS appropriés pour "lecture", "pause", etc...

17 votes

Je parie que vous vous demandez où se trouve la documentation relative à toutes les méthodes audio : stackoverflow.com/questions/4589451/

1661voto

Uri Points 2724

Si vous ne voulez pas vous embêter avec les éléments HTML :

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

function play() {
  var audio = new Audio('https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3');
  audio.play();
}

<button onclick="play()">Play Audio</button>

Cela utilise le HTMLAudioElement qui lit l'audio de la même manière que l'interface <audio> élément .


Si vous avez besoin de plus de fonctionnalités, j'ai utilisé le howler.js et l'ont trouvé simple et utile.

<script src="https://cdnjs.cloudflare.com/ajax/libs/howler/2.1.1/howler.min.js"></script>
<script>
    var sound = new Howl({
      src: ['https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3'],
      volume: 0.5,
      onend: function () {
        alert('Finished!');
      }
    });
    sound.play()
</script>

13 votes

Cette méthode fonctionne pour la lecture des mp3 mais pas pour les fichiers wav. Existe-t-il un moyen de lire les fichiers wav ?

17 votes

@user3293156 Cette méthode prend en charge les mêmes formats que la méthode HTML5. <audio> . Wikipedia a un table de compatibilité de format de l'audio . new Audio() peut lire les fichiers WAV dans tous les navigateurs, sauf Internet Explorer.

380 votes

@RoryO'Kane donc tout le monde peut lire le format audio de microsoft sauf microsoft ? lol

200voto

shanabus Points 6589

C'est facile, il suffit de prendre votre audio et appeler l'élément play() méthode :

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

Regardez cet exemple : http://www.storiesinflight.com/html5/audio.html

Ce site découvre d'autres choses sympas que vous pouvez faire, telles que load() , pause() et quelques autres propriétés de la audio élément.

0 votes

Cela fonctionne aussi sur iOS sans interférence de l'interface utilisateur (mettez une balise audio avec autoplay et muted) puis mute false et call play.

1 votes

Il ne peut pas être utilisé dans une fonction qui s'active à l'aide de la fonction onload voir este . Cependant, cela a bien fonctionné pour moi en utilisant onclick . L'utilisateur doit d'abord interagir avec une page pour pouvoir jouer un son (c'est le comportement régulier, attendu et convivial).

0 votes

C'était facile, mais plus maintenant ;)

39voto

LordZardeck Points 1972

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

SoundManager 2 fournit une API facile à utiliser qui permet de jouer du son dans n'importe quel navigateur moderne, y compris IE 6+. Si le navigateur ne supporte pas HTML5, il est aidé par Flash. Si vous voulez strictement du HTML5 et pas de flash, il y a un paramètre pour cela, preferFlash=false

Il prend en charge l'audio 100% sans Flash sur l'iPad, l'iPhone (iOS4) et d'autres appareils + navigateurs compatibles HTML5.

L'utilisation est aussi simple que cela :

<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>

Voici une démo de ce système en action : http://www.schillmania.com/projects/soundmanager2/demo/christmas-lights/

0 votes

J'ai essayé la démo dans Safari et Chrome (dernières versions, 2022) sous macos, et il n'y a pas de son.

0 votes

@endavid C'est une réponse vieille de 10 ans, et je ne la recommanderais plus. Utilisez la réponse acceptée d'Uri ci-dessus : stackoverflow.com/a/18628124

38voto

Il s'agit d'une question assez ancienne mais je souhaite ajouter quelques informations utiles. L'auteur du sujet a mentionné qu'il est "making a game" . Ainsi, pour tous ceux qui ont besoin de l'audio pour le développement de jeux, il existe un meilleur choix qu'un simple lecteur de DVD. <audio> ou une balise HTMLAudioElement . Je pense que vous devriez envisager l'utilisation de la API Audio Web :

Si l'audio sur le web ne nécessite plus de plugin, la balise audio apporte des limitations importantes pour la mise en œuvre de jeux sophistiqués et d'applications interactives. L'API audio Web est une API JavaScript de haut niveau pour le traitement et la synthèse de l'audio dans les applications Web. L'objectif de cette API est d'inclure les capacités des moteurs audio des jeux modernes et certaines des tâches de mixage, de traitement et de filtrage que l'on trouve dans les applications modernes de production audio de bureau.

24voto

Cybernetic Points 2882

Facile avec Jquery

// définir les balises audio sans préchargement

<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>

// ajout de jquery pour le chargement

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

// écrire des méthodes pour jouer et s'arrêter

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

// décider comment contrôler l'audio

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

EDITAR

Pour répondre à la question de @stomy, voici comment vous utiliseriez cette approche pour jouer une liste de lecture :

Placez vos chansons dans un objet :

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'
}

Utilisez les fonctions de déclenchement et de lecture comme auparavant :

$(".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);
      }
 }

Chargement dynamique de la première chanson :

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

Réinitialise la source audio au morceau suivant de la liste de lecture, lorsque le morceau en cours se termine :

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

Véase ici pour un exemple de ce code en action.

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