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.

Comments
No comments yet. Start the conversation.