J'ai volontairement écarté toute ligne de JavaScript du contenu de l'article, mais un mot tout de même !
Manipuler des audio en JS est très direct :
music=newAudio("music.mp3");// Charger un fichiermusic.volume=0.5;// Régler le volumemusic.play();// Lancer la lecturemusic.stop();// Arrêter la lecture
Pour avancer de 15 secondes dans une piste audio :
music.currentTime+=15;
J'ai appris au passage qu'on ne pouvait pas jouer deux fois le même fichier en parallèle (ce qui pourtant est nécessaire si deux bruitages identiques sont joués de façon rapprochée). Le problème se résoud avec la fonction cloneNode :
music.cloneNode().play();music.cloneNode().play();// Deuxième lecture en parallèle
Par ailleurs, le nombre de joueurs étant très variable, chaque nouveau zombie ne fait pas progresser la musique d'un cycle précisément, contrairement à ce qui est expliqué dans l'article pour simplifier. Nous avons une fonction progressTo(progression) qui prend un nombre entre 0 et 1, reflétant l'évolution du jeu (0 étant de le début, et 1 la fin). Ainsi, appeler progressTo(0.5) signifie que le jeu est à la moitié de sa progression (la moitié des joueurs sont des zombies). La musique peut alors avancer en fonction du nombre de cycles disponibles et, éventuellement, sauter des cycles si nécessaire.
C'est tout ! Le reste du travail n'était que du JS classique.
Cependant, mon implémentation n'est pas ultra précise. Mon code utilise des setTimeout et setInterval, et rien ne garantit qu'ils seront appelé exactement au bon moment.
Je n'avais pas le temps d'expérimenter au-delà, et c'est totalement spéculatif, mais peut-être faudrait-il aller voir du côté des service workers, ou de WebAssembly, ou d'une autre manière de gérer l'audio que j'ignore totalement ?
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
J'ai volontairement écarté toute ligne de JavaScript du contenu de l'article, mais un mot tout de même !
Manipuler des audio en JS est très direct :
Pour avancer de 15 secondes dans une piste audio :
J'ai appris au passage qu'on ne pouvait pas jouer deux fois le même fichier en parallèle (ce qui pourtant est nécessaire si deux bruitages identiques sont joués de façon rapprochée). Le problème se résoud avec la fonction
cloneNode
:Par ailleurs, le nombre de joueurs étant très variable, chaque nouveau zombie ne fait pas progresser la musique d'un cycle précisément, contrairement à ce qui est expliqué dans l'article pour simplifier. Nous avons une fonction
progressTo(progression)
qui prend un nombre entre0
et1
, reflétant l'évolution du jeu (0 étant de le début, et 1 la fin). Ainsi, appelerprogressTo(0.5)
signifie que le jeu est à la moitié de sa progression (la moitié des joueurs sont des zombies). La musique peut alors avancer en fonction du nombre de cycles disponibles et, éventuellement, sauter des cycles si nécessaire.C'est tout ! Le reste du travail n'était que du JS classique.
Cependant, mon implémentation n'est pas ultra précise. Mon code utilise des
setTimeout
etsetInterval
, et rien ne garantit qu'ils seront appelé exactement au bon moment.Je n'avais pas le temps d'expérimenter au-delà, et c'est totalement spéculatif, mais peut-être faudrait-il aller voir du côté des service workers, ou de WebAssembly, ou d'une autre manière de gérer l'audio que j'ignore totalement ?