Metrónomo Online (Tap Tempo)
Um metrónomo online gratuito com temporização precisa ao nível da amostra, número de tempos por compasso ajustável, um pulso visual acentuado e um botão de tap tempo para encontrar qualquer BPM de ouvido.
227 visualizações
Toque no ritmo — são necessários pelo menos 2 toques
Usa o agendador look-ahead da Web Audio API (AudioContext.currentTime) para uma sincronização precisa em nível de amostra — não é um simples setInterval, então não há desvio mesmo sob carga pesada da página.
Por Que a Maioria dos Metrónomos de Navegador Perde o Compasso
A forma óbvia de construir um metrónomo em JavaScript é setInterval(playClick, 60000 / bpm). Funciona bem durante alguns segundos — depois deixa de funcionar. O setInterval apenas garante que uma função de retorno dispara não antes do atraso pedido, nunca garante quanto tempo depois poderá efetivamente disparar. A thread principal do JavaScript é partilhada com tudo o que a página faz — atualizações do DOM, cálculos de layout, pausas do garbage collector — e qualquer uma dessas tarefas pode atrasar um temporizador pendente em dezenas de milissegundos. Para a maior parte do código de interface isso é invisível; para um metrónomo é fatal, já que um clique 40ms atrasado neste tempo e 10ms atrasado no seguinte não soa apenas "um pouco errado" — desvia-se de forma audível, iludindo ativamente um músico que está a praticar contra ele.
Os músicos confiam num metrónomo precisamente porque a perceção humana do tempo constante não é fiável sem uma referência externa — esse é todo o propósito do dispositivo desde que Johann Maelzel patenteou a versão de corda em 1815. Um metrónomo de software que ele próprio perde o compasso anula esse propósito, e a solução não é um temporizador mais inteligente: todos os temporizadores de JS, incluindo o requestAnimationFrame, partilham o mesmo estrangulamento da thread principal. A verdadeira solução é deixar de pedir ao JavaScript que produza o som exatamente no momento certo.
Look-Ahead Scheduling: Como Este Metrónomo Se Mantém Preciso
Esta ferramenta usa o padrão popularizado por Chris Wilson, antigo membro da equipa de Web Audio do Google Chrome, no seu artigo amplamente citado "A Tale of Two Clocks": separar completamente a lógica de agendamento da temporização do som. O AudioContext da Web Audio API corre na sua própria thread de áudio com um relógio preciso ao nível da amostra, exposto ao JavaScript como AudioContext.currentTime. Ao chamar osc.start(t) com um instante futuro desse relógio, o motor de áudio reproduz o som exatamente em t, independentemente do que a thread principal esteja a fazer nesse instante — nunca foi necessário que ela "acordasse" com precisão sobre o tempo para que isso acontecesse.
A única tarefa da thread principal passa a ser administrativa: aproximadamente a cada 25ms, um agendador verifica se há tempos a cair nos 100ms seguintes e chama osc.start() para cada um com o seu exato currentTime futuro. Como esse ciclo só precisa de ser aproximadamente pontual, os pequenos atrasos habituais não causam qualquer problema audível — o som continua agendado com precisão ao nível da amostra. Cada clique é um breve impulso de osciladores de ~30ms, mais agudo no primeiro tempo de cada compasso para criar um acento audível, sincronizado com um pulso visual correspondente.
O Tap Tempo resolve um problema diferente: descobrir o BPM de uma música sem partitura para o ler. Toque ao ritmo do tempo; a ferramenta mede o intervalo entre os toques e converte-o com 60000 / intervaloMédioMs. São necessários pelo menos dois toques, e fazer a média dos toques recentes suaviza pequenos erros de temporização. Um intervalo superior a dois segundos reinicia a sequência, já que isso normalmente significa que o ritmo se perdeu em vez de ter apenas abrandado drasticamente.
Perguntas Frequentes
Por que um metrónomo simples com setInterval soa irregular ao longo do tempo?
O setInterval apenas promete que uma função de retorno dispara não antes do atraso pedido — pode disparar mais tarde sempre que a thread principal esteja ocupada com layout, garbage collection ou outra atividade do separador. Esses pequenos atrasos irregulares acumulam-se tempo após tempo, pelo que o clique se desvia de forma audível em vez de se manter fixo ao tempo. Esta ferramenta evita isso entregando a temporização real do som ao próprio relógio da thread de áudio da Web Audio API, em vez de depender do temporizador do JS disparar no instante exato.
O que é "look-ahead scheduling" e por que resolve o desvio?
É um padrão em que o JavaScript nunca tenta reproduzir um som exatamente no instante em que é devido. Um ciclo verifica a cada ~25ms se algum tempo cai nos 100ms seguintes e pré-agenda um oscilador para cada um usando o AudioContext.currentTime mais o deslocamento exato, através de osc.start(instanteFuturoPreciso). O motor de áudio dispara esse oscilador com precisão ao nível da amostra na sua própria thread, independentemente da thread principal — assim o ciclo de agendamento pode ser impreciso enquanto o tempo real se mantém exato.
Como é que o Tap Tempo calcula o BPM?
Cada clique no botão Tap Tempo regista um instante. A partir do segundo toque, a ferramenta mede o intervalo desde o toque anterior, mantém um histórico curto e deslizante dos intervalos recentes, e converte a sua média num tempo com 60000 dividido pelo intervalo médio em milissegundos. São necessários pelo menos dois toques, e um intervalo superior a dois segundos reinicia a sequência, já que isso quase sempre significa que se parou de tocar em vez de se continuar a um tempo extremamente lento.
Por que o primeiro tempo de cada compasso tem um som diferente?
É um acento, padrão tanto em metrónomos mecânicos como digitais: o primeiro tempo do compasso (downbeat) toca numa frequência mais alta do que os restantes, associado a um pulso visual de cor diferente. Isso torna possível identificar onde cai o "um" num padrão de 3/4 ou 6/8 num relance ou de ouvido, o que é importante para contar corretamente os compassos, sobretudo em fórmulas de compasso em que, de outra forma, todos os tempos soariam idênticos.
Que intervalo de BPM cobre este metrónomo, e o que significa BPM?
BPM significa batidas por minuto (beats per minute) — quantos pulsos ocorrem em sessenta segundos. Esta ferramenta suporta de 30 a 300 BPM, cobrindo toda a gama usada na música escrita: a indicação Grave situa-se por volta dos 25-45 BPM, o Andante (andamento de passo) por volta dos 76-108, e as passagens Presto podem ultrapassar os 200 BPM. 120 BPM é o valor predefinido por ser um tempo de prática comum e confortável, e por corresponder à clássica indicação Moderato.
Ferramentas Semelhantes
Reportar um Problema
Metrónomo Online (Tap Tempo)
Comentários
Ainda não há comentários — seja o primeiro a escrever um!