The tuner on your wrist.
TunerToGo turns a Wear OS watch into a precise instrument tuner – with automatic string
detection for guitar, bass, ukulele and strings, a chromatic mode, and a strobe.
Install · How it works · FAQ · Development
- Precise – pitch detection from 25 Hz (low B of a 5-string bass) to 4.5 kHz with sub-cent resolution, measured on the watch in real time.
- Calm display – the needle is smoothed, single-frame slips (pick attack, octave jumps) are ignored, and the last note stays on screen for a moment after the string stops.
- Instrument mode – the tuner finds the string you play and measures against it, even when it is far off. Turn the crown (or tap the dial) to lock onto one string; tuned strings get a tick.
- Feel it – a short vibration when the note is in tune, so your eyes can stay on the pegs.
- Gauge or strobe – a colour-coded gauge, or a strobe that stands still when you hit the note.
- For musicians – reference pitch 400–480 Hz (442 Hz orchestra, 415 Hz baroque), transposition for B♭, E♭ and F instruments, English (B), German (H) or solfège note names, sharps or flats.
- Reference tone to tune by ear, on watches with a speaker.
- Tile to start tuning with one tap; works standalone, no phone app needed.
- Private – no internet permission at all; nothing is recorded or stored.
- Pay once – no ads, no in-app purchases, no subscriptions, no account.
- English and German.
| Instrument | Tunings |
|---|---|
| Guitar | Standard (E A D G B E), E♭ Standard, D Standard, Drop D, Drop C, DADGAD, Open D, Open G, Open E, Open C |
| 7-string guitar | Standard (B E A D G B E), Drop A |
| Bass | Standard (E A D G), E♭ Standard, Drop D, 5-string (B E A D G), 6-string (B E A D G C) |
| Ukulele | Standard (re-entrant g C E A), Low G, D tuning, Baritone (D G B E) |
| Violin · Viola · Cello | G D A E · C G D A · C G D A |
| Double bass | Orchestra (E A D G), Solo (F♯ B E A) |
| Mandolin | G D A E |
| Banjo | Open G (g D G B D), Double C, Open D |
| Chromatic | Any note – also for wind instruments and voice |
From Google Play on the watch, or from the Play Store on the paired phone – a one-time purchase without ads or in-app purchases, which keeps the development going. Requires Wear OS 3 or newer and a watch with a microphone.
Build it yourself: the source is open, so you are welcome to build and install your own
copy (see Development); on the watch, enable Developer options and
Wireless debugging and run ./gradlew :app:installRelease (signed with your debug key
when there is no keystore.properties).
- Listening – while the tuner screen is open, the microphone delivers 44.1 kHz audio (unprocessed where the watch supports it, so noise suppression can't bend the pitch).
- Pitch – every 23 ms the last 93 ms of sound go through the YIN algorithm (de Cheveigné & Kawahara, 2002), computed with an FFT. YIN looks for the period of the waveform rather than for the loudest frequency, so it still finds a low E whose fundamental a small watch microphone barely picks up. Parabolic interpolation gives sub-cent precision, and a strict octave check catches the rare case where the second harmonic fools it.
- Reading – quiet or noisy frames are dropped, single-frame outliers ignored, a new note is followed once it is heard twice in a row. A median and a light exponential average smooth the value; the current note or string only changes when another one is clearly closer, so the display never flickers at a boundary.
- In tune – once the pitch stays within the chosen range (±3 cents by default) for a quarter of a second, the dial turns green and the watch taps your wrist.
The signal processing is plain Kotlin without native code and is covered by unit tests with synthetic sines, plucked strings (Karplus-Strong), missing fundamentals and noise.
The tuner shows the wrong string.
When a string is tuned down by more than a few semitones, its pitch can be closer to the neighbouring string. Turn the crown (or rotating bezel) to lock the tuner onto the string you are tuning – it steps through Auto, every string and back to Auto. On watches without a crown, tap the middle of the dial instead. A locked string has an amber ring.
It doesn't react to my instrument.
Hold the watch closer to the sound hole or the amplifier and let the note ring. In a quiet room or with soft instruments, set Sensitivity to High; in a noisy room, set it to Low. If the mic icon shows a crossed-out microphone, another app (e.g. the assistant) is using it.
Why is there no reference tone on my watch?
The entry only appears on watches with a speaker (or a connected Bluetooth speaker or headphones). Watch speakers can't play low notes, so the tone is built from harmonics – your ear still hears the right pitch.
Why these permissions?
| Permission | Used for |
|---|---|
| Microphone | Hearing your instrument, only while the tuner is open |
| Vibration | The tap when a note is in tune (can be turned off) |
TunerToGo has no internet permission. See the privacy policy; questions to contact@devemperor.net.
Kotlin, Jetpack Compose for Wear OS (Material 3) and ProtoLayout for the tile.
./gradlew :app:testDebugUnitTest # unit tests: pitch detection, note names, tunings, smoothing
./gradlew :app:lintDebug # Android lint, including the Wear OS checks
./gradlew :app:assembleDebug # debug APK (net.devemperor.tunertogo.debug)
./gradlew :app:bundleRelease # release bundle for Google PlayRelease builds are signed with the upload key named in an untracked keystore.properties
in the repository root (see keystore.properties.example).
Without it, the release APK is signed with the debug key, which is fine for testing on a
watch but not accepted by Play.
| Path | What it does |
|---|---|
app/src/main/kotlin/…/audio/ |
Microphone capture, FFT, YIN pitch detector, reference tone |
app/src/main/kotlin/…/tuner/ |
Smoothing and string/note logic (TunerProcessor), view model, haptics |
app/src/main/kotlin/…/music/ |
Pitch math, note naming, instruments and tunings |
app/src/main/kotlin/…/ui/ |
Compose screens: dial, strobe, menu, pickers |
app/src/main/kotlin/…/tile/ |
The tile |
fastlane/metadata/android/ |
Play Store listing in English and German |
docs/play-console.md |
Publishing checklist with the answers for every Play Console form |
art/, tools/ |
Icon and feature graphic sources, screenshot and asset scripts |
Testing without an instrument: the debug build accepts a synthetic input instead of the microphone, and a deep link into any screen:
adb shell am start -n net.devemperor.tunertogo.debug/net.devemperor.tunertogo.MainActivity \
--ef demo_hz 80.5 --ef demo_drift 3 --es routes menu,reference_pitchtools/capture-screenshots.sh takes the store screenshots on a Wear OS Large Round
emulator, tools/render-store-assets.sh turns them into the store and README graphics.
- Icons: Material Symbols by Google, Apache License 2.0.
- Pitch detection after A. de Cheveigné and H. Kawahara, YIN, a fundamental frequency estimator for speech and music, J. Acoust. Soc. Am. 111 (4), 2002.
- Google Play and the Google Play logo are trademarks of Google LLC.
Apache License 2.0 – see also NOTICE.








