Ich benutze HTML5, um Spiele zu programmieren. Das Hindernis, auf das ich jetzt gestoßen bin, ist das Abspielen von Soundeffekten.
Es gibt nur wenige spezifische Anforderungen:
- Spielen und mischen Sie mehrere Sounds,
- Spielen Sie dasselbe Sample mehrmals ab, wobei sich die Wiedergabe möglicherweise überschneidet.
- Unterbrechen Sie die Wiedergabe eines Samples zu jedem Zeitpunkt.
- Spielen Sie vorzugsweise WAV-Dateien ab, die Roh-PCM (von geringer Qualität) enthalten, aber ich kann diese natürlich konvertieren.
Mein erster Ansatz war, das HTML5- <audio>
Element zu verwenden und alle Soundeffekte auf meiner Seite zu definieren. Firefox spielt die WAV-Dateien nur pfirsichfarben ab, aber wenn Sie #play
mehrmals aufrufen , wird das Sample nicht wirklich mehrmals abgespielt . Nach meinem Verständnis der HTML5-Spezifikation verfolgt das <audio>
Element auch den Wiedergabestatus, sodass erklärt wird, warum.
Mein unmittelbarer Gedanke war, die Audioelemente zu klonen, also habe ich die folgende winzige JavaScript-Bibliothek erstellt, um dies für mich zu tun (abhängig von jQuery):
var Snd = {
init: function() {
$("audio").each(function() {
var src = this.getAttribute('src');
if (src.substring(0, 4) !== "snd/") { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length - 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};
Jetzt kann ich Snd.boom();
über die Firebug-Konsole spielen und spielen snd/boom.wav
, aber ich kann immer noch nicht dasselbe Sample mehrmals spielen. Es scheint, dass das <audio>
Element eher eine Streaming-Funktion als etwas ist, mit dem Soundeffekte abgespielt werden können.
Gibt es eine clevere Möglichkeit, dies zu erreichen, die mir fehlt, vorzugsweise nur HTML5 und JavaScript?
Ich sollte auch erwähnen, dass meine Testumgebung Firefox 3.5 unter Ubuntu 9.10 ist. Die anderen Browser, die ich ausprobiert habe - Opera, Midori, Chromium, Epiphany - haben unterschiedliche Ergebnisse erzielt. Einige spielen nichts und andere werfen Ausnahmen.