尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Live beat tracking in the browser: madmom's neural model ported to plain JavaScript. No backend, no WASM, no ONNX.
翻譯準備中
正在載入完整 README。
檢視完整 README ↗Live beat tracker that runs entirely in the browser: it listens to audio, locks onto the tempo, shows which beat of the bar you are on and how hard it was accented — and a little robot dances to it.
No backend, no WASM, no dependencies. madmom's neural model is ported to plain JavaScript and produces exactly the same beats as the original, down to float32 rounding noise.
▶ Try it — hit "Listen to input" (microphone or system monitor) or "Tab audio" to pick up whatever is playing in another tab.
audio ─▶ AudioWorklet ─▶ features ─▶ 8x LSTM ensemble ─▶ HMM ─▶ beats
│ (441 hops) (FFT + (with peepholes) (forward) │
│ filterbank ▼
│ + log + diff) grid
│ (tempo, meter)
└─▶ rolling 6 s window ─▶ bidirectional BLSTM ─▶ phase vote ─▶ the "1"
(in a Web Worker) (downbeat model)
The beat tracker is causal and runs in real time. The downbeat model is bidirectional — it cannot run in streaming — so it lives in a Web Worker over a 6 s window, and every beat votes for its position in the bar.
python3 serve.py 8090 # serves web/, no caching
It has to be over HTTP: ES modules and AudioWorklet do not work from file://.
In production HTTPS is required (the microphone demands it); Netlify handles that
for you.
npm test # parity against madmom, stage by stage
node test/silence.mjs # the gate: noise vs music
node test/gapfill.mjs # filling in skipped beats
node test/meter.mjs a.f32 # meter on songs of known meter
node test/playlist.mjs a.f32 # meter recovery when the track changes
node test/dance.mjs # dance subdivisions, without a browser
The parity tests need fixtures that are not versioned (~11 MB). Regenerate them with the exporters:
AUDIO_E2E=/path/to/a/song.mp3 python tools/export_madmom.py
python tools/export_downbeats.py 3
That needs madmom==0.16.1 in Python (see
docs/MIGRATION.md).
Static site, no build. netlify.toml already sets publish = "web".
netlify deploy --prod
Or connect the repo from the Netlify dashboard: it picks up netlify.toml and
there is nothing to configure.
web/ what gets published
├── index.html, app.js, styles.css
├── worklet.js collects 441-sample hops
├── downbeat-worker.js
├── src/ the port: features, network, HMM, grid, accent, meter, dance
└── public/models/ exported weights (2.7 MB)
tools/ exporters from madmom (Python)
test/ parity and behaviour (Node)
docs/ the two long documents
serve.py development server with caching disabled
The model is madmom's (Böck et al.), BSD. This repo only ports it.
MIT.