Metronomo Online (Tap Tempo)
Un metronomo online gratuito con temporizzazione precisa al campione, battiti per misura regolabili, un impulso visivo accentato e un pulsante Tap Tempo per trovare qualsiasi BPM a orecchio.
225 visualizzazioni
Tocca a ritmo — servono almeno 2 tocchi
Usa lo scheduler look-ahead della Web Audio API (AudioContext.currentTime) per una temporizzazione precisa al campione — non un semplice setInterval, quindi non c'è deriva anche sotto carico pesante della pagina.
Perché la maggior parte dei metronomi da browser perde il tempo
Il modo più ovvio per costruire un metronomo in JavaScript è setInterval(playClick, 60000 / bpm). Funziona per qualche secondo — poi smette di funzionare. setInterval garantisce solo che una callback venga eseguita non prima del ritardo richiesto, mai quanto più tardi possa effettivamente scattare. Il thread principale di JS è condiviso con tutto ciò che la pagina fa — aggiornamenti del DOM, calcolo del layout, garbage collection — e ognuna di queste attività può ritardare un timer in attesa di decine di millisecondi. Per la maggior parte del codice dell'interfaccia questo è invisibile; per un metronomo è fatale, perché un clic in ritardo di 40ms su un battito e di 10ms sul successivo vaga in modo udibile invece di suonare semplicemente impreciso, ingannando attivamente un musicista che si sta esercitando seguendolo.
I musicisti si affidano a un metronomo proprio perché la percezione umana del tempo costante è inaffidabile senza un riferimento esterno — lo scopo stesso del dispositivo fin da quando Johann Maelzel brevettò la versione a carica nel 1815. Un metronomo software che a sua volta perde il tempo vanifica quello scopo, e la soluzione non è un timer più intelligente: ogni timer JS, incluso requestAnimationFrame, condivide lo stesso collo di bottiglia del thread principale. La vera soluzione è smettere del tutto di chiedere a JavaScript di produrre il suono nel momento esatto.
Look-Ahead Scheduling: come questo metronomo resta preciso
Questo strumento usa il pattern reso popolare da Chris Wilson, ex membro del team Web Audio di Google Chrome, nel suo articolo molto citato "A Tale of Two Clocks": separare completamente la logica di pianificazione dalla temporizzazione del suono. L'AudioContext della Web Audio API gira sul proprio thread audio dedicato con un orologio preciso al campione, esposto a JavaScript come AudioContext.currentTime. Chiamare osc.start(t) con un timestamp futuro preso da quell'orologio fa sì che il motore audio lo riproduca esattamente all'istante t, indipendentemente da cosa stia facendo il thread principale in quel momento — non ha mai dovuto "svegliarsi" con precisione esattamente sul battito perché ciò accadesse.
L'unico compito del thread principale è la contabilità: circa ogni 25ms, uno scheduler controlla quali battiti cadono nei successivi 100ms e chiama osc.start() per ciascuno con il suo esatto currentTime futuro. Poiché quel ciclo deve essere solo approssimativamente puntuale, il normale jitter non causa alcun problema udibile — il suono resta comunque pianificato con precisione al campione. Ogni clic è un impulso di oscillatore di circa 30ms, dal tono più acuto sul primo battito di ogni misura per creare un accento udibile, sincronizzato con un impulso visivo corrispondente.
Tap Tempo risolve un problema diverso: trovare il BPM di un brano senza uno spartito da cui leggerlo. Basta battere il tempo a mano seguendo il ritmo; lo strumento misura l'intervallo tra i tocchi e lo converte con 60000 / intervalloMedioMs. Sono necessari almeno due tocchi, e la media dei tocchi recenti attenua i piccoli errori di temporizzazione. Una pausa superiore a due secondi azzera la sequenza, poiché di solito significa che il ritmo è stato perso, non che è semplicemente rallentato in modo drastico.
Domande Frequenti
Perché un semplice metronomo con setInterval suona irregolare col passare del tempo?
setInterval promette solo che una callback scatti non prima del ritardo richiesto — può scattare più tardi ogni volta che il thread principale è occupato con il layout, la garbage collection o altre attività della scheda. Questi piccoli ritardi irregolari si accumulano battito dopo battito, così il clic si sfasa in modo udibile invece di restare ancorato al tempo. Questo strumento evita il problema affidando la temporizzazione reale del suono all'orologio del thread audio dedicato della Web Audio API, invece di contare sul timer JS per scattare esattamente al momento giusto.
Cos'è il "look-ahead scheduling" e perché risolve lo sfasamento?
È un pattern in cui JavaScript non tenta mai di riprodurre un suono esattamente nel momento in cui è dovuto. Un ciclo controlla ogni ~25ms se qualche battito cade nei successivi 100ms e pre-pianifica un oscillatore per ciascuno usando AudioContext.currentTime più l'esatto offset, tramite osc.start(tempoFuturoPreciso). Il motore audio fa scattare quell'oscillatore con precisione al campione sul proprio thread, indipendentemente dal thread principale — così il ciclo di pianificazione può essere impreciso mentre il battito reale resta esatto.
Come calcola il BPM la funzione Tap Tempo?
Ogni clic sul pulsante Tap Tempo registra un timestamp. Dal secondo tocco in poi, lo strumento misura l'intervallo dal tocco precedente, mantiene una breve cronologia scorrevole degli intervalli recenti e converte la loro media in un tempo dividendo 60000 per l'intervallo medio in millisecondi. Servono almeno due tocchi, e una pausa superiore a due secondi azzera la sequenza, poiché quasi sempre significa che si è smesso di battere il tempo piuttosto che continuato a un tempo estremamente lento.
Perché il primo battito di ogni misura ha un tono diverso?
È un accento, standard sia sui metronomi meccanici sia su quelli digitali: il primo battito (downbeat) suona a una frequenza più alta rispetto agli altri, abbinato a un impulso visivo di colore diverso. Questo permette di individuare a colpo d'occhio o a orecchio dove cade "l'uno" in un pattern in 3/4 o 6/8, cosa importante per contare correttamente le misure, specialmente nelle indicazioni di tempo in cui ogni battito suonerebbe altrimenti identico.
Quale intervallo di BPM copre questo metronomo, e cosa significa BPM?
BPM sta per battiti al minuto (beats per minute) — quanti impulsi si verificano in sessanta secondi. Questo strumento supporta da 30 a 300 BPM, coprendo l'intera gamma usata nella musica scritta: un'indicazione Grave si colloca intorno a 25-45 BPM, l'Andante, tempo di passeggio, intorno a 76-108, e i passaggi Presto possono superare i 200 BPM. 120 BPM è il valore predefinito perché è un tempo di pratica comune e confortevole, oltre a essere la classica indicazione Moderato.
Strumenti Simili
Segnala un Problema
Metronomo Online (Tap Tempo)
Commenti
Ancora nessun commento — scrivi il primo!