Plattformübergreifende, browserübergreifende Möglichkeit, Sound aus Javascript abzuspielen? [Duplikat]


78

Ich schreibe eine HTML-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 sehr große Menge an Altdaten.

Einige Schritte in der Simulation erfordern, dass wir "Voice-Over" -Aclips von Audio abspielen. Ich konnte keinen einfachen Weg finden, dies in mehreren Browsern zu erreichen.

Soundmanager2 kommt dem, was ich brauche, ziemlich nahe, aber es werden nur MP3-Dateien abgespielt, und die alten Daten können auch einige WAV-Dateien enthalten.

Hat jemand andere Bibliotheken, die helfen könnten?


5
Ich bin froh, dass Sie Ihre Lösung gefunden haben, aber unabhängig davon möchten Sie möglicherweise die Konvertierung dieser WAV-Dateien in MP3-Dateien in Betracht ziehen. Wenn Sie die Klangqualität nur geringfügig verringern, können Sie die Dateigröße von 1/3 auf 1/10 der Größe einer Wave-Datei verringern. Könnte dazu führen, dass die Dinge beim Spielen von Sounds etwas reaktionsfähiger werden.
Infocyde

Antworten:


61

Sie müssen ein Plug-In wie Real Audio oder QuickTime einbinden, um die WAV-Datei zu verarbeiten, aber dies 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);
    }
//======================================================================

15
Ich verstehe niemals Abstimmungen. Das funktioniert. Ich habe es in meiner Anwendung bereitgestellt. Warum verdient es eine Abwertung?
Dacracot

2
Ich weiß nicht, warum Sie abgewählt wurden, vielleicht für die Verwendung der Wörter "echtes Audio" oder "Quicktime" .. ?? Vielleicht hatte die Person, die Sie herabgestimmt hat, keine Ahnung, wie es gemacht wurde? Was mich
betrifft

1
Manchmal denke ich, dass es daran liegt, dass ich den Code geschrieben habe, anstatt die derzeitige beliebte API zu nennen, die, wie Sie sagten, genau dasselbe tut.
Dacracot

1
Tolle Lösung für mein Problem. +1.
Mauris

3
Es scheint jedoch nicht, dass die Sounddatei in FF3.0 abgespielt wird. funktioniert in Chrome 3, IE7.
Mauris

9

Wenn Sie Prototype verwenden, verfügt die Scriptaculous-Bibliothek über eine Sound-API . jQuery scheint auch ein Plugin zu haben.


5
Der jQuery Plugin Link antwortet mit einem 403.
Arion

Der zweite Link in der Antwort ist tot - "Diese Seite kann nicht erreicht werden" .
Pang

@Pang Jede einzelne Antwort auf diese Frage ist zu diesem Zeitpunkt längst veraltet. Heutzutage möchten Sie die universell unterstützten HTML5-Audio-APIs verwenden. Ich habe diese Frage als Duplikat einer aktuelleren Frage geschlossen.
Ceejayoz

8

Dacracots Code ist sauber Basic Dom, aber vielleicht ohne einen zweiten Gedanken geschrieben? Natürlich überprüfen Sie zuerst das Vorhandensein einer früheren Einbettung und speichern die doppelten Einbettungserstellungszeilen.

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);
}

Kam hier über die Gedanken hinweg, während ich nach einer Lösung für eine ähnliche Situation suchte. Leider stirbt mein Browser Mozilla / 5.0 (X11; U; Linux i686; en-US; rv: 1.9.0.15) Gecko / 2009102814 Ubuntu / 8.04 (hardy) Firefox / 3.0.15, wenn ich dies versuche.

Nach der Installation der neuesten Updates stürzt Firefox immer noch ab, die Oper bleibt am Leben.


7

Ich glaube, dass der einfachste und bequemste Weg darin besteht, den Sound mit einem kleinen Flash-Clip abzuspielen. Ich schätze, dass es keine JavaScript-Lösung ist, aber es ist der einfachste Weg, um Ihr Ziel zu erreichen

Einige zusätzliche Links aus der vorherigen ähnlichen Frage :


1
Ich kann jedoch keine Flash-Lösungen finden, mit denen WAV-Dateien abgespielt werden können. Es scheint, dass Flash nur MP3 unterstützt. Ich werde mir das Plugin von scriptaculous ansehen, aber ich hasse es, eine ganze zusätzliche Bibliothek für diese eine Funktionalität einzuschließen.
Jake Stevenson

5

Sie können das HTML5- <audio>Tag verwenden.


Die Frage stellte speziell eine "plattformübergreifende, browserübergreifende" Lösung. HTML5- <audio>Tag funktioniert nicht in IE8-, Android 2.2-, iOS Safari 3.2- oder Opera Mini: caniuse.com/#feat=audio
Jasdeep Khalsa

Hinweis: 2018 HTML5 Audio wird von allen außer Opera unterstützt.
Aidan Connelly

5

Die Antwort von Dacracot hat mir gefallen ... hier ist eine ähnliche Lösung in jQuery:

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



1

Es gibt eine weitaus einfachere Lösung, als auf Plug-Ins zurückgreifen zu müssen. IE hat eine eigene bgsound-Eigenschaft und es gibt eine andere Möglichkeit, wie Sie es für alle anderen Browser verwenden können. Schauen Sie sich mein Tutorial hier an = http://www.andy-howard.com/how-to-play-sounds-cross-browser-including-ie/index.html


Ihre Lösung sieht interessant aus, ich werde es versuchen. Beachten Sie, dass auf der von Ihnen verlinkten Seite ein Kommentar angezeigt wird, der darauf hinweist, dass das Audio in IE11 in einer Endlosschleife ausgeführt wird. Ist das noch ein Problem? Gibt es eine Möglichkeit, dies zu vermeiden?
Kevin Fegan

0

Für eine browserübergreifende Lösung mit WAV-Dateien würde ich vorschlagen, ein <audio>Tag als Standard <embed>festzulegen und dann die Lösung zu wählen, die @dacracot zuvor hier vorgeschlagen hat, wenn sich der Benutzer im IE befindet. Sie können dies leicht mit einer kleinen Suche hier in SO überprüfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.