Voca 1.2: less waiting between sentences, private diagnostics when you choose
Voca 1.2: less waiting between sentences, private diagnostics when you choose
Voca 1.2 makes long listening sessions flow better, especially with speech engines that take
their time producing audio. It also adds a way to send a useful bug report without attaching
your Nostr identity, or sending anything unless you explicitly choose to.
Voca is a private listen-later reader for Android. Share an article, paste text, open a PDF or
Markdown file, follow a feed, or paste a Nostr link, and Voca turns it into a listening queue
using the speech service already configured on your phone. Your library, reading position,
bookmarks, and imported documents stay on the device.
Closing the gap between sentences
Some Android speech engines are quick when speaking live but slow when asked to render audio
to a file. Worse, an engine may ignore or delay the callback that says a cancelled render has
stopped. If that work is allowed to remain in front of live speech, the listener hears a long
pause even though Voca already knows the next sentence.
The renderer in Voca 1.2 has one clear owner and one priority queue. Background preparation
never preempts speech the listener is waiting for. When live speech takes over, both an
in-flight render and any urgent request that has not reached the engine receive one terminal
result immediately. Late callbacks cannot deliver a second result. An engine that collided
with the live lane is not probed again during that service session.
The practical result is less waiting at sentence boundaries and fewer repeated encounters
with an engine behavior Voca cannot force Android to change.
A diagnostic report without an account
Until now, diagnosing an engine-specific pause meant reproducing it locally or asking the
listener to describe what happened. Voca already kept a bounded in-memory trace, but there
was no deliberate, privacy-preserving way to send it.
The new diagnostics screen starts with a warning and a complete preview. Sending is a
one-time action. An optional message can explain what you were doing. Document text remains
off by default and has its own consent switch for that report; turning it on includes only
bounded snippets already captured by the trace. Dismissing the screen or completing the
attempt clears the message and resets that consent.
Reports exclude account data because Voca has no account. They also exclude hardware model,
manufacturer, advertising identifiers, stable device identifiers, the library, and document
files. There is no periodic upload, crash-reporting SDK, analytics service, or background
sender.
When you tap Send, Voca creates a fresh Nostr key used only for that report. The report is
delivered to Voca’s support identity as a NIP-17 private message, then the sender key is
destroyed. A later report gets a different key, so reports are not designed to form a user
profile.
Small reports fit directly inside the encrypted message. For a larger report, Voca compresses
and encrypts it on the phone, uploads only the ciphertext to a Blossom server, and sends the
content-addressed link plus the decryption material inside the private message. The receiver
validates the recipient’s signed inbox-relay list; the app validates the upload receipt’s
hash, size, media type, and HTTPS origin before it sends the message.
Local-first remains the rule
Diagnostics are useful only if they do not quietly become surveillance. Voca 1.2 keeps the
boundary visible: nothing is sent until the listener opens the dialog, reviews the report,
chooses whether text is appropriate, and presses Send. That choice applies once.
Voca remains free software under the MIT license, designed first for GrapheneOS and available
for Android 10 and newer. The source and releases are published over Nostr.
Write a comment