Repository navigation
Voice Search
The microphone button in search turns speech into a query. With the optional model installed, Roadstr recognises it itself, on the phone — no audio is sent anywhere.
Status: experimental 🧪. It has met real streets, and the first road test is what produced the address repair described below. Speed, memory and battery across a range of phones are still unmeasured.
Settings → Voice search → Download the model (485 MB, once). That is the only thing that turns it on: nothing is downloaded by itself, not at install, not on Wi-Fi, not in the background. Delete the model removes it again.
The first time you tap the microphone with the model installed, Android asks for the microphone permission. The microphone is open only while the listening card is on screen.
model installed and language known? ── no ──▶ your phone's own speech recogniser (as before)
│ yes
microphone permission? ── denied ──▶ your phone's own speech recogniser
│ granted
listening card ─▶ record until you stop talking (or tap Done) ─▶ recognise ─▶ text in the search box
Roadstr finds the end of what you say by itself: it learns how loud the room is, treats a run of frames about 2.2 times louder as speech, keeps 0.3 s before the start so the first syllable is not clipped, and stops after 1.2 s of silence. It gives up after 8 s without speech and cuts an utterance off at 20 s. In a noisy car silence may never come, so the card has a Done button. While you talk, the model loads in parallel, so there is no wait once you stop.
If anything goes wrong — no permission, microphone busy, not enough memory, the model cannot load, a language the model does not know — the button hands over to whichever recogniser your phone provides. If OSTT (Offline Speech to Text) is installed and answers the standard speech intent, it is tried first.
| CPU | 64-bit Arm (arm64-v8a) |
| RAM | 3 GB in total to be offered at all; 1.5 GB free at the moment the model loads (conservative estimates, not measurements) |
| Storage | 485 MB for the model, plus a 64 MB margin while it downloads |
| Android | 7.0 or newer |
| Permission | Microphone, asked at first use |
NVIDIA Parakeet TDT 0.6B v3, a Q4 GGUF conversion by handy-computer, licensed CC-BY-4.0 (attribution is shown in Settings). 25 languages: Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian and Ukrainian.
The download comes from an address that names an exact upstream commit, over HTTPS; it resumes after an interruption and the file is only accepted when its size and SHA-256 both match values compiled into the app. A wrong file is deleted, never loaded.
A speech model gets the sounds right and the writing wrong, and a map search needs the writing. Two steps repair what is predictable:
- Numbers. Italian number words left in an address become digits — via d'arsena diciassette becomes Via Darsena 17, centoventitré becomes 123. “Numero” or “civico” in front of the number goes. Numbers that are part of a name stay (Piazza dei Tre Martiri, Via Venti Settembre). Other languages keep what the model wrote.
- Street names. The text is compared — ignoring spaces, apostrophes, accents and doubled letters, and treating c/k/ch alike — with the names of the streets around you. A street is replaced by the map's spelling only when it is clearly the closest one: via chiavi caromea becomes Via Chiavica Romea. A short name is never guessed, and a tie changes nothing.
The street list comes from Overpass, once a month per area. The request names the centre of a cell about 5 km across, never your position and never anything you said. If the servers cannot be reached, the house number is still fixed and the street is left as heard.
- The audio is processed in memory by the engine and never written to disk, sent or logged.
- The engine does not use the network. The only requests are the model download (
huggingface.cosees your IP address and a file request) and the street names of your area (Overpass sees the centre of a 5 km cell). - When it falls back to your phone's recogniser, what that recogniser does with audio is up to your phone's vendor, exactly as before.
- Speech models make mistakes on proper nouns: street and place names are the hardest case.
- The model can write numbers wrongly (a house number run into a year, for instance); the repair cannot fix that.
- Recognition was tuned and tested on clean synthesised speech first. Cars, wind and accents are the open question.
- The end-of-speech settings have been tried on synthetic noise and on early road tests only.
The engine is a separate, reusable project: roadstrapp/offline-speech-to-text,
engine/ — a copy of Offline Speech to Text by Noah Mühl (MIT) with the inference core extracted into a small library built on
transcribe.cpp. Roadstr vendors its source and binaries, which can be rebuilt byte for byte
(third_party/offline-stt-engine/rebuild.sh). Full detail, with what was and was not measured:
docs/offline-voice-search.md.
Roadstr is open source under the MIT licence · Source · Releases · Changelog · Issues
Using Roadstr
- Installation
- Getting started
- Navigation
- Maps and offline use
- Search and Explore
- Road reports
- Public transport
- Voice guidance
- Voice search
- Journey and achievements
- Settings reference
Nostr and money
Trust
Build and extend