Vocal Practice Log

Record singing sessions, tag your BPM, key & scale, and keep notes β€” all saved locally in your browser. No account, no upload, works offline.

0
day streak πŸ”₯
Start your first session to begin your streak.
0
sessions

New Session

🎀
0:00
Press Record to start your session.
Microphone access was denied. Please allow microphone permission in your browser settings and reload.
β€”

Tap the button on the beat Γ—4 to calculate average BPM.

Session History

No sessions yet. Record your first session above.

How it works

Everything runs in your browser using MediaRecorder for audio capture and IndexedDB for persistent local storage β€” no server, no login.

Audio capture MediaRecorder records your mic in WebM/OGG chunks. The blob is stored directly in IndexedDB (no size limit like localStorage).
BPM tap-tempo Tap Γ—4 on the beat. The app averages the gaps between taps: BPM = 60 000 Γ· avg_gap_ms. Reset anytime.
Streak counter Counted from today back through consecutive calendar days with at least one saved session.
CSV export Downloads all session metadata (date, duration, BPM, key, scale, notes) as a CSV file. Audio blobs are not included in the CSV.

BPM verification example: tapping at 120 BPM β†’ gaps of ~500 ms each β†’ 60 000 Γ· 500 = 120 BPM. βœ“

Frequently asked questions

Does my audio get uploaded anywhere?
No. All audio is captured locally by your browser's MediaRecorder API and stored in your browser's IndexedDB database. Nothing is ever sent to a server. The audio stays on your device and is only accessible from the same browser you used to record it. Clearing browser data will erase stored sessions.
How accurate is the tap-tempo BPM calculation?
The formula is BPM = 60,000 Γ· average_gap_ms, averaged across all taps after the first. Four or more taps gives a reliable reading (Β±1–2 BPM). Fewer taps can skew the result if your first tap timing is off, so tap along for at least four beats before trusting the number. You can always reset and retap.
What happens if I close the tab or refresh the page mid-recording?
The in-progress recording will be lost β€” the audio blob is only written to IndexedDB when you press Stop then Save. Sessions you have already saved are safe because they are already in IndexedDB. Make it a habit to stop and save before closing the tab.
Can I listen back to old recordings?
Yes. Each saved session shows a built-in audio player if a recording was captured. The audio is loaded directly from IndexedDB so playback is instant and completely offline. Sessions saved without a recording (e.g. you just logged notes) show only the metadata.
What does the streak counter track?
It counts how many consecutive calendar days ending today you have at least one saved session. Practice every day and the number grows; miss a day and it resets to the current run. The total session count in the top-right corner tallies all sessions ever saved.