Audio spirit-level for Android — tone tracks tilt, bell pings when level. Kotlin/Compose, offline.
🌐 Languages: English · Nederlands · Deutsch · Français · Español · Português · Italiano · Polski · Русский · Українська · Türkçe · Svenska · Dansk · Norsk · Suomi · Čeština · Ελληνικά · Română · Magyar · 日本語 · 한국어 · 简体中文 · 繁體中文 · العربية · עברית · हिन्दी · ไทย · Tiếng Việt · Bahasa Indonesia · فارسی
An audio spirit-level for Android. Lay your phone flat on its back and let your ears do the leveling: a continuous synth tone tracks how far off level the surface is, and a bell ping confirms the moment all four corners are level.
▶ Watch the 30-second demo — the phone tilts, the bubble drifts to the high edge, then settles green-centered on the target as it comes level.
⚠️ The demo has no audio. Android screen recording can't capture an app's generated sound, so the video is silent. On a real phone you'd hear the tone rise to a steady pitch and the bell ping at level — that's the whole point of the app. See How it works for what you'd be hearing.
- Continuous tone — far off level → low pitch with a fast amplitude wobble; as you approach level the pitch rises and the wobble slows; dead level → a high, steady tone (1318 Hz).
- Level ping — a decaying bell chime fires every time you cross into level, so you don't even need to watch the screen.
- Direction readout — an on-screen bubble level plus a label (
Top edge high,Left side high, … →LEVEL) tells you which way it's tilting. - Volume slider, an adjustable pitch slider (transpose the whole tone up to ±1 octave to a range that's easy on your ears), and an optional stereo-pan switch (off by default) that pans the tone left/right with the tilt.
Fully offline — no network, no permissions beyond the motion sensor.
LevelTone is not on the Play Store — you sideload it:
- Download
LevelTone.apkfrom the latest release. - Open the file. If Android warns, tap Settings → Allow from this source, then confirm Install.
- Open the app.
See the User Manual for how to level something by ear.
- Free — no cost, no accounts.
- Ad-free — no ads, ever. No trackers, no network.
- No support — this is a hobby app provided as-is, with no guarantee of support or updates. That said, bug reports and pull requests are welcome — open an issue or a PR.
export ANDROID_HOME=~/android-sdk
./gradlew :app:assembleDebug
# -> app/build/outputs/apk/debug/app-debug.apk- Kotlin + Jetpack Compose (Material 3, dark)
SensorManagerTYPE_GRAVITY(falls back to a low-pass–filtered accelerometer)- Streaming
AudioTracksine synth with click-free one-pole smoothing - minSdk 24 · compileSdk 35 · package
eu.cisodiagonal.leveltone
Screen-normal tilt = acos(gz / |g|) (0° = flat). Roll atan2(gx, gz) and pitch
atan2(gy, gz) give the left/right and front/back components that drive the bubble and
the direction label.
MIT

