Efekty dźwiękowe w JavaScript / HTML5

Używam HTML5 do programowania gier; przeszkodą, na którą się teraz natknąłem, jest sposób odtwarzania efektów dźwiękowych.

Specyficzne wymagania są nieliczne:

Graj i miksuj wiele dźwięków,Zagraj w tę samą próbkę wiele razy, prawdopodobnie nakładające się na siebie,Przerwij odtwarzanie próbki w dowolnym punkcie,Najlepiej odtwarzać pliki WAV zawierające (niską jakość) surowego PCM, ale oczywiście mogę je konwertować.

Moim pierwszym podejściem było użycie HTML5<audio> element i zdefiniuj wszystkie efekty dźwiękowe na mojej stronie. Firefox odtwarza pliki WAV tylko peachy, ale wywołuje#play wiele razy tak naprawdę nie odtwarza próbki wielokrotnie. Z mojego rozumienia specyfikacji HTML5<audio> element śledzi również stan odtwarzania, co wyjaśnia dlaczego.

Moją pierwszą myślą było sklonowanie elementów audio, więc stworzyłem następującą malutką bibliotekę JavaScript, aby to zrobić dla mnie (w zależności od 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;
      };
    });
  }
};

Więc teraz mogę to zrobićSnd.boom(); z konsoli Firebug i grajsnd/boom.wav, ale wciąż nie mogę odtworzyć tej samej próbki wiele razy. Wydaje się, że<audio> Element jest bardziej funkcją przesyłania strumieniowego, a nie czymś, z czym można odtwarzać efekty dźwiękowe.

Czy istnieje sprytny sposób, aby to się stało, że brakuje mi, najlepiej przy użyciu tylko HTML5 i JavaScript?

Powinienem również wspomnieć, że moim środowiskiem testowym jest Firefox 3.5 na Ubuntu 9.10. Inne przeglądarki, które próbowałem - Opera, Midori, Chromium, Epiphany - dawały różne wyniki. Niektórzy nie grają niczego, a niektóre rzucają wyjątki.

questionAnswers(16)

yourAnswerToTheQuestion