2008-10-09 2 views
79

Ich schreibe eine DHTML-Anwendung, die eine interaktive Simulation eines Systems erstellt. Die Daten für die Simulation werden von einem anderen Tool generiert, und es gibt bereits eine große Menge an Altdaten.Cross-Plattform, Cross-Browser-Weg, um Sound von Javascript zu spielen?

Einige Schritte in der Simulation erfordern, dass wir "voice-over" Audioclips abspielen. Ich konnte keinen einfachen Weg finden, dies über mehrere Browser hinweg zu erreichen.

Soundmanager2 kommt ziemlich nah an das, was ich brauche, aber es wird nur mp3-Dateien abspielen, und die alten Daten können auch einige. WAV-Dateien enthalten.

Hat jemand andere Bibliotheken, die helfen könnten?

+5

Froh, dass Sie Ihre Lösung gefunden haben, aber unabhängig davon möchten Sie vielleicht erwägen, diese .wav-Dateien in .mp3-Dateien umzuwandeln. Wenn Sie die Klangqualität etwas verringern, können Sie die Dateigröße von 1/3 bis 1/10 der Größe einer Wave-Datei verringern. Könnte die Dinge beim Abspielen von Sounds etwas reaktionsschneller machen. – infocyde

Antwort

62

Sie ein Plug-in wie Real Audio oder Quicktime enthalten müssen, um die WAV-Datei zu behandeln, aber das sollte funktionieren ...

//====================================================================== 
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); 
    } 
//====================================================================== 
+14

Ich verstehe nie Down-Stimmen. Das funktioniert. Ich habe es in meiner Anwendung bereitgestellt. Warum verdient es eine Down-Abstimmung? – dacracot

+1

Als die Person, die die Frage stellte, frage ich mich auch. Es sieht nach einer ziemlich guten/einfachen Lösung für mich aus. Würde jemand kommentieren, was falsch ist? –

+2

Ich weiß nicht, warum Sie gewählt wurden, vielleicht für die Verwendung der Wörter "Real Audio" oder "Quicktime" .. ?? Vielleicht hat die Person, die Sie abgelehnt hat, keine Ahnung, wie es gemacht wurde? Wie für mich, +1, ist Ihr Code etwa genauso wie der in der jQuery-Plugin in der am häufigsten angenommenen Antwort verwendet ... – karlipoppins

8

Ich glaube, dass der einfachste und bequemste Weg wäre, den Ton mit einem kleinen Flash-Clip zu spielen. Ich schätze, es ist keine Lösung, JavaScript, aber es ist der einfachste Weg, um Ihr Ziel

einige zusätzlichen Links von den vorherigen similar question zu erreichen:

+1

Aber ich kann keine Flash-Lösungen finden, die WAV-Dateien abspielen. Es scheint, Flash unterstützt nur MP3. Ich werde scriptaculous Plugin betrachten, aber ich hasse es, eine ganze zusätzliche Bibliothek für diese ein bisschen Funktionalität einzuschließen. –

9

dacracots code ist sauber basic dom, aber vielleicht ohne einen zweiten Gedanken geschrieben? Natürlich prüfen Sie zuerst die Existenz einer früheren Einbettung und speichern Sie die Duplikate eingebettete Erstellungszeilen.

Kam hier über die Gedanken während der Suche nach einer Lösung für etwas ähnliche Situation. Leider mein Browser Mozilla/5.0 (X11; U; Linux i686; de-US; rv: 1.9.0.15) Gecko/2009102814 Ubuntu/8.04 (hardy) Firefox/3.0.15 stirbt bei dem Versuch dies.

Nach der Installation der neuesten Updates stürzt firefox immer noch ab, Opera bleibt am Leben.

5

Sie können den Tag HTML5 <audio> verwenden.

+0

Die Frage wurde speziell nach einer "plattformübergreifenden, browserübergreifenden" Lösung gestellt. HTML5 '

+0

Hinweis im Jahr 2018 HTML5 Audio wird von allen außer Opera unterstützt. –

6

mochte ich dacracot Antwort ... hier eine ähnliche Lösung in jQuery ist:

function Play(sound) { 
    $("#sound_").remove() 
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />'); 
} 
3
<audio controls> 
    <source src="horse.ogg" type="audio/ogg"> 
    <source src="horse.mp3" type="audio/mpeg"> 
Your browser does not support the audio element. 
</audio> 

http://www.w3schools.com/html/html5_audio.asp Details für mehr sehen.

1

Es gibt eine viel einfachere Lösung, anstatt auf Plug-Ins zurückgreifen zu müssen. IE hat seine eigene bgsound -Eigenschaft und es gibt eine andere Möglichkeit, die es für alle anderen Browser funktionieren lässt.Sehen Sie sich mein Tutorial hier an: http://www.andy-howard.com/how-to-play-sounds-cross-browser-including-ie/index.html

+0

Ihre Lösung sieht interessant aus, ich werde es versuchen. Beachten Sie, dass auf der verlinkten Seite ein Kommentar steht, der darauf hinweist, dass das Audio in IE11 in einer Endlosschleife läuft. Ist das immer noch ein Problem? Gibt es eine Möglichkeit, es zu vermeiden? –

Verwandte Themen