J'utilise HTML5 pour programmer des jeux; l'obstacle que j'ai rencontré maintenant est de savoir comment jouer des effets sonores.
Les exigences spécifiques sont peu nombreuses:
- Jouez et mixez plusieurs sons,
- Jouez le même échantillon plusieurs fois, éventuellement des chevauchements de lectures,
- Interrompez la lecture d'un échantillon à tout moment,
- Jouez de préférence des fichiers WAV contenant du PCM brut (de faible qualité), mais je peux les convertir, bien sûr.
Ma première approche a été d'utiliser l' <audio>
élément HTML5 et de définir tous les effets sonores de ma page. Firefox lit les fichiers WAV simplement pêche, mais appeler #play
plusieurs fois ne joue pas vraiment l'échantillon plusieurs fois. D'après ma compréhension de la spécification HTML5, l' <audio>
élément suit également l'état de la lecture, ce qui explique pourquoi.
Ma pensée immédiate était de cloner les éléments audio, j'ai donc créé la petite bibliothèque JavaScript suivante pour le faire pour moi (cela dépend de 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;
};
});
}
};
Alors maintenant, je peux le faire à Snd.boom();
partir de la console Firebug et jouer snd/boom.wav
, mais je ne peux toujours pas jouer le même échantillon plusieurs fois. Il semble que l' <audio>
élément soit plus une fonctionnalité de streaming que quelque chose avec lequel jouer des effets sonores.
Existe-t-il un moyen intelligent de faire en sorte que cela me manque, en utilisant de préférence uniquement HTML5 et JavaScript?
Je dois également mentionner que mon environnement de test est Firefox 3.5 sur Ubuntu 9.10. Les autres navigateurs que j'ai essayés - Opera, Midori, Chromium, Epiphany - ont produit des résultats variables. Certains ne jouent rien, et certains lèvent des exceptions.