Métronome en Ligne (Tempo au Clic)
Un métronome en ligne gratuit avec une précision à l'échantillon près, un nombre de temps par mesure réglable, un pouls visuel accentué, et un bouton de tempo au clic pour trouver n'importe quel BPM à l'oreille.
228 vues
Tapez en rythme — au moins 2 taps nécessaires
Utilise le planificateur look-ahead de l'API Web Audio (AudioContext.currentTime) pour un minutage précis à l'échantillon près — pas un simple setInterval, donc aucune dérive même sous forte charge de la page.
Pourquoi la plupart des métronomes de navigateur dérivent
La façon évidente de construire un métronome en JavaScript est setInterval(jouerClic, 60000 / bpm). Cela fonctionne pendant quelques secondes — puis non. setInterval garantit seulement qu'un rappel se déclenche au plus tôt après le délai demandé, jamais combien de temps plus tard il pourrait réellement s'exécuter. Le thread principal de JS est partagé avec tout ce que fait la page — mises à jour du DOM, mise en page, ramasse-miettes — et n'importe lequel de ces éléments peut retarder un minuteur en attente de dizaines de millisecondes. Pour la plupart du code d'interface, c'est invisible ; pour un métronome, c'est fatal, puisqu'un clic en retard de 40 ms sur ce temps et de 10 ms sur le suivant dérive de façon audible au lieu de simplement sonner faux, induisant activement en erreur un musicien qui s'exerce dessus.
Les musiciens s'appuient sur un métronome précisément parce que la perception humaine du temps régulier est peu fiable sans référence externe — tout l'intérêt de l'appareil depuis que Johann Maelzel a breveté sa version à remontoir en 1815. Un métronome logiciel qui dérive lui-même trahit cet objectif, et la solution n'est pas un minuteur plus astucieux : tout minuteur JS, y compris requestAnimationFrame, partage le même goulot d'étranglement du thread principal. La vraie solution consiste à cesser complètement de demander à JavaScript de produire le son au bon moment.
Planification anticipée : comment ce métronome reste précis
Cet outil utilise le schéma popularisé par Chris Wilson, ancien membre de l'équipe Web Audio de Google Chrome, dans son article largement cité « A Tale of Two Clocks » : séparer entièrement la logique de planification du minutage sonore. L'AudioContext de la Web Audio API s'exécute sur son propre thread audio avec une horloge précise à l'échantillon près, exposée à JavaScript sous la forme AudioContext.currentTime. Appeler osc.start(t) avec un horodatage futur de cette horloge fait jouer le moteur audio exactement à t, quoi que fasse le thread principal à cet instant précis — il n'a jamais eu besoin de « se réveiller » exactement sur le temps pour que cela se produise.
Le seul travail du thread principal est comptable : environ toutes les 25 ms, un planificateur vérifie les temps qui tombent dans les 100 ms suivantes et appelle osc.start() pour chacun avec son currentTime futur exact. Comme cette boucle n'a besoin d'être qu'approximativement à l'heure, une gigue ordinaire ne pose aucun problème audible — le son reste planifié avec une précision à l'échantillon près. Chaque clic est une brève salve d'oscillateur d'environ 30 ms, plus aigu sur le premier temps de chaque mesure pour un accent audible, synchronisé avec un pouls visuel correspondant.
Le Tempo au Clic résout un problème différent : trouver le BPM d'une musique sans partition à lire. Tapez en rythme avec le temps ; l'outil mesure l'intervalle entre les clics et le convertit avec 60000 / intervalleMoyenMs. Au moins deux clics sont nécessaires, et la moyenne des clics récents lisse les petites erreurs de synchronisation. Un écart de plus de deux secondes réinitialise la séquence, car cela signifie généralement que le temps a été perdu plutôt que fortement ralenti.
Questions fréquentes
Pourquoi un métronome à simple setInterval sonne-t-il de façon irrégulière avec le temps ?
setInterval promet seulement qu'un rappel se déclenche au plus tôt après le délai demandé — il peut se déclencher plus tard chaque fois que le thread principal est occupé par la mise en page, le ramasse-miettes ou une autre activité de l'onglet. Ces petits délais irréguliers s'accumulent temps après temps, si bien que le clic dérive de façon audible au lieu de rester verrouillé au tempo. Cet outil évite cela en confiant le minutage réel du son à l'horloge propre du thread audio de la Web Audio API plutôt qu'en comptant sur le minuteur JS pour se déclencher au bon instant.
Qu'est-ce que la « planification anticipée » et pourquoi corrige-t-elle la dérive ?
C'est un schéma où JavaScript n'essaie jamais de jouer un son à l'instant précis où il est dû. Une boucle vérifie environ toutes les 25 ms si des temps tombent dans les 100 ms suivantes et planifie à l'avance un oscillateur pour chacun en utilisant AudioContext.currentTime plus le décalage exact, via osc.start(tempsFuturPrecis). Le moteur audio déclenche cet oscillateur avec une précision à l'échantillon près sur son propre thread, indépendamment du thread principal — la boucle de planification peut donc être approximative tandis que le temps réel reste exact.
Comment le Tempo au Clic calcule-t-il le BPM ?
Chaque clic sur le bouton Tempo au Clic enregistre un horodatage. À partir du deuxième clic, l'outil mesure l'intervalle depuis le clic précédent, conserve un court historique glissant des intervalles récents, et convertit leur moyenne en tempo avec 60000 divisé par l'intervalle moyen en millisecondes. Au moins deux clics sont nécessaires, et un écart de plus de deux secondes réinitialise la séquence, car cela signifie presque toujours que le clic s'est arrêté plutôt que d'avoir continué à un tempo extrêmement lent.
Pourquoi le premier temps de chaque mesure a-t-il une hauteur différente ?
C'est un accent, standard aussi bien sur les métronomes mécaniques que numériques : le premier temps (temps fort) joue à une fréquence plus élevée que les autres, associé à un pouls visuel d'une couleur différente. Cela permet de repérer où tombe le « un » dans un motif à 3/4 ou 6/8 d'un coup d'œil ou à l'oreille, ce qui compte pour compter correctement les mesures, en particulier dans les signatures rythmiques où chaque temps sonnerait sinon identique.
Quelle plage de BPM ce métronome couvre-t-il, et que signifie BPM ?
BPM signifie battements par minute — le nombre de pulsations en soixante secondes. Cet outil prend en charge de 30 à 300 BPM, couvrant toute la plage utilisée en musique écrite : une indication Grave se situe autour de 25-45 BPM, le tempo de marche Andante autour de 76-108, et les passages Presto peuvent dépasser 200 BPM. 120 BPM est la valeur par défaut car c'est un tempo de pratique courant et confortable, et l'indication classique Moderato.
Outils similaires
Signaler un problème
Métronome en Ligne (Tempo au Clic)
Commentaires
Pas encore de commentaires — soyez le premier à en écrire un !