J'utilise HTML5 pour programmer des jeux. L'obstacle que je rencontre actuellement est de savoir comment jouer des effets sonores.
Les exigences spécifiques sont peu nombreuses :
- Jouez et mélangez plusieurs sons,
- Jouer le même échantillon plusieurs fois, éventuellement en le faisant se chevaucher,
- Interrompre la lecture d'un échantillon à n'importe quel moment,
- Jouez de préférence des fichiers WAV contenant du PCM brut (de basse qualité), mais je peux les convertir, bien sûr.
Ma première approche a été d'utiliser le HTML5 <audio>
et définir tous les effets sonores de ma page. Firefox lit les fichiers WAV comme sur des roulettes, mais en appelant #play
multiple times ne joue pas vraiment l'échantillon plusieurs fois. D'après ce que je comprends de la spécification HTML5, l'option <audio>
suit également l'état de la lecture, ce qui explique pourquoi.
J'ai immédiatement pensé à cloner les éléments audio, et j'ai donc créé la minuscule bibliothèque JavaScript suivante pour le faire à ma place (elle 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;
};
});
}
};
Donc maintenant je peux faire Snd.boom();
à partir de la console Firebug et jouer snd/boom.wav
mais je ne peux toujours pas lire le même échantillon plusieurs fois. Il semble que le <audio>
est davantage une fonction de streaming qu'un outil permettant de jouer des effets sonores.
Existe-t-il un moyen astucieux de réaliser cette opération que je n'ai pas trouvé, de préférence en utilisant 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 donné des résultats variables. Certains ne jouent rien, d'autres lèvent des exceptions.
0 votes
Hah ! Je suis aussi en train de porter un vieux jeu Macintosh en HTML5. Vous voulez bien révéler lequel vous clonez ?
1 votes
C'est le projet ARASHI, un clone de Tempest.
0 votes
Qu'entend-on par "mélanger" les sons ?
0 votes
@ThomasWessel : Plusieurs sons joués en même temps.
2 votes
L'avez-vous terminé ? On peut le voir ?
4 votes
Malheureusement, non. J'ai le chic pour ne pas terminer mes projets pendant mon temps libre :( Il y a un dépôt git pour ce projet, mais je ne l'ai pas touché depuis des années : github.com/stephank/arashi-js