79 votes

Multiplate-forme, multi-navigateur de façon à jouer du son à partir de Javascript?

Je suis en train d'écrire une application dhtml qui crée une simulation interactive d'un système. Les données pour la simulation est généré à partir d'un autre outil, et il y a déjà une très grande quantité de données existantes.

Certaines étapes de la simulation exigent que nous jouons "voice-over" des clips audio. J'ai été incapable de trouver un moyen facile pour accomplir cette sur plusieurs navigateurs.

Soundmanager2 est assez proche de ce dont j'ai besoin, mais il ne suffit de lire les fichiers mp3, et de l'héritage de données peut contenir des .les fichiers wav.

Quelqu'un at-il d'autres bibliothèques qui pourrait aider?

63voto

dacracot Points 8567

Vous devrez inclure un plug-in comme Real Audio ou QuickTime pour gérer le fichier .wav, mais cela devrait fonctionner ...

 //======================================================================
var soundEmbed = null;
//======================================================================
function soundPlay(which)
    {
    if (!soundEmbed)
    	{
    	soundEmbed = document.createElement("embed");
    	soundEmbed.setAttribute("src", "/snd/"+which+".wav");
    	soundEmbed.setAttribute("hidden", true);
    	soundEmbed.setAttribute("autostart", true);
    	}
    else
    	{
    	document.body.removeChild(soundEmbed);
    	soundEmbed.removed = true;
    	soundEmbed = null;
    	soundEmbed = document.createElement("embed");
    	soundEmbed.setAttribute("src", "/snd/"+which+".wav");
    	soundEmbed.setAttribute("hidden", true);
    	soundEmbed.setAttribute("autostart", true);
    	}
    soundEmbed.removed = false;
    document.body.appendChild(soundEmbed);
    }
//======================================================================
 

9voto

ceejayoz Points 85962

Si vous utilisez Prototype, la bibliothèque Scriptaculous dispose d'une API audio . jQuery semble également avoir un plugin .

8voto

joshoreefe Points 91

dacracots code est propre base de dom, mais peut-être écrit sans une seconde pensée? Bien sûr, vous vérifiez l'existence d'une précédente incorporer d'abord, et enregistrez la copie incorporer la création de lignes.

var soundEmbed = null;
//=====================================================================

function soundPlay(which)
{
    if (soundEmbed)
       document.body.removeChild(soundEmbed);
    soundEmbed = document.createElement("embed");
    soundEmbed.setAttribute("src", "/snd/"+which+".wav");
    soundEmbed.setAttribute("hidden", true);
    soundEmbed.setAttribute("autostart", true);
    document.body.appendChild(soundEmbed);
}

Est venu à travers les pensées ici lors de la numérisation d'une solution pour un peu semblable situation. Malheureusement, mon navigateur Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102814 Ubuntu/8.04 (hardy) Firefox/3.0.15 meurt lors de l'essayer.

Après l'installation des dernières mises à jour, firefox se bloque toujours, opéra maintient en vie.

7voto

Ilya Kochetov Points 11641

Je crois que le plus simple et le plus pratique serait de jouer le son à l'aide d'un petit Flash clip. J'apprécie ce n'est pas une solution d'activer JavaScript mais c'EST la meilleure façon d'atteindre votre objectif

Quelques liens supplémentaires à partir de la précédente question similaire:

5voto

Howard Points 220

J'ai aimé la réponse de dacracot ... voici une solution similaire dans jQuery:

 function Play(sound) {
    $("#sound_").remove()
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />');
}
 

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