Recording captures no audio: all STT backends fail with SecurityException on FireOS, no audio file written, user sees silent 0-segment session #143

Closed
opened 2026-09-11 04:08:06 +00:00 by Mark · 0 comments
Owner

Bug

Tapping "Start recording" in the Recording screen appears to start a recording: the timer counts up, the Speaker/Subject chip rows appear, and tapping Stop creates a session in the Transcripts list with the recorded duration. But no audio is actually captured. The session row in the DB has audio_file_path = NULL and transcript_segments count is 0. The session detail shows "No transcript segments".

Reproduced on a Fire HD KFTRWI (Amazon FireOS), app com.voicetranscriber v1.0 built from 93b7fd1 (Stop silent STT credential fallback, 2026-09-10). Tested with a 2m 10s recording — UI behaved correctly, DB row existed, audio never written.

Root cause from logcat

SpeechBackend: Selected: ANDROID | available: [ANDROID, FIREOS] | missing: {CLOUD=[No API key configured], LOCAL_WHISPER=[Whisper model not found at /data/user/0/com.voicetranscriber/files/models/ggml-tiny.bin]}
TranscriptionService: Available backends: [ANDROID, FIREOS]
TranscriptionService: Attempting backend: ANDROID
TranscriptionService: Backend ANDROID failed (SecurityException): Not allowed to bind to service Intent { act=android.speech.RecognitionService cmp=amazon.speech.sim/com.amazon.alexa.multimodal.assistant.AlexaVoiceInteractionService }
TranscriptionService: Attempting backend: FIREOS
TranscriptionService: Backend FIREOS failed (SecurityException): Not allowed to bind to service Intent { act=android.speech.RecognitionService cmp=amazon.speech.sim/com.amazon.alexa.multimodal.assistant.AlexaVoiceInteractionService }
TranscriptionService: All backends failed to start. Stopping service.

Both ANDROID and FIREOS backends fail with SecurityException on the Fire HD because the system SpeechRecognizer routes to amazon.speech.sim/com.amazon.alexa.multimodal.assistant.AlexaVoiceInteractionService and the app cannot bind to it. LOCAL_WHISPER would work, but no model is downloaded (Models screen lists Tiny / Tiny (English) / Base as available, but BackendConfigScreen does not expose LOCAL_WHISPER in the priority list — see companion bug).

What the user sees

  1. Tap Start recording → timer runs, mic indicator may or may not appear
  2. Stop → session row appears in Transcripts with correct duration
  3. Tap session row → "No transcript segments" message
  4. No audio file is written to /data/data/com.voicetranscriber/files/ or external storage
  5. No error message is shown to the user; the silent failure is not visible

Impact

  • The entire "Transcripts" view is non-functional on FireOS until a Whisper model is downloaded AND LOCAL_WHISPER is selected as the active backend
  • The app gives no indication that the recording failed — users assume their voice was captured
  • The Speaker/Subject chip selection during recording is lost because the session has no segments to attribute
  • All downstream features (Notes, Search, Diarization, Topic Extraction, Summarization, Session Tags) are unreachable because they all gate on segments.isNotEmpty()

Suggested fix directions

  1. Surface a visible error when all backends fail: the Recording screen should show "Recording failed — no transcription backend available. Download a Whisper model or check your microphone permissions." instead of silently showing a 0-segment session.
  2. Auto-record the raw audio via MediaRecorder even if the SpeechRecognizer backend fails, so users at least get a .m4a file that can be transcribed later.
  3. Fix the LOCAL_WHISPER BackendConfigScreen bug (companion issue) so users can promote LOCAL_WHISPER to the top of the priority list before the ANDROID/FIREOS backends.
  4. Fix the FireOS SpeechRecognizer binding — either request a special permission for amazon.speech.sim/... on FireOS devices, or detect FireOS and skip the ANDROID/FIREOS backends entirely when LOCAL_WHISPER is the only realistic option.

Evidence

  • DB before fix: (1, 'Untitled recording', 1789098115153, 1789098127684, None, None) — 12s test, no audio
  • DB after fix: (2, 'Untitled recording', 1789098766618, 1789098897057, None, None) — 2m 10s test, no audio
  • Logcat timestamps from the 2m 10s attempt: 20:52:46.755 → 20:52:46.759 — both ANDROID and FIREOS fail in 4ms
  • Models screen DOES list Whisper models for download, but LOCAL_WHISPER card is missing from the BackendConfigScreen priority list (companion issue)

Reported by Hermes on 2026-09-10 during smoke testing of v1.0 (build from 93b7fd1) on Fire HD KFTRWI (G001KT05122500T3).

## Bug Tapping "Start recording" in the Recording screen appears to start a recording: the timer counts up, the Speaker/Subject chip rows appear, and tapping Stop creates a session in the Transcripts list with the recorded duration. **But no audio is actually captured.** The session row in the DB has `audio_file_path = NULL` and `transcript_segments` count is 0. The session detail shows "No transcript segments". Reproduced on a Fire HD KFTRWI (Amazon FireOS), app `com.voicetranscriber` v1.0 built from `93b7fd1` (Stop silent STT credential fallback, 2026-09-10). Tested with a 2m 10s recording — UI behaved correctly, DB row existed, audio never written. ## Root cause from logcat ``` SpeechBackend: Selected: ANDROID | available: [ANDROID, FIREOS] | missing: {CLOUD=[No API key configured], LOCAL_WHISPER=[Whisper model not found at /data/user/0/com.voicetranscriber/files/models/ggml-tiny.bin]} TranscriptionService: Available backends: [ANDROID, FIREOS] TranscriptionService: Attempting backend: ANDROID TranscriptionService: Backend ANDROID failed (SecurityException): Not allowed to bind to service Intent { act=android.speech.RecognitionService cmp=amazon.speech.sim/com.amazon.alexa.multimodal.assistant.AlexaVoiceInteractionService } TranscriptionService: Attempting backend: FIREOS TranscriptionService: Backend FIREOS failed (SecurityException): Not allowed to bind to service Intent { act=android.speech.RecognitionService cmp=amazon.speech.sim/com.amazon.alexa.multimodal.assistant.AlexaVoiceInteractionService } TranscriptionService: All backends failed to start. Stopping service. ``` Both ANDROID and FIREOS backends fail with `SecurityException` on the Fire HD because the system SpeechRecognizer routes to `amazon.speech.sim/com.amazon.alexa.multimodal.assistant.AlexaVoiceInteractionService` and the app cannot bind to it. LOCAL_WHISPER would work, but no model is downloaded (Models screen lists Tiny / Tiny (English) / Base as available, but BackendConfigScreen does not expose LOCAL_WHISPER in the priority list — see companion bug). ## What the user sees 1. Tap Start recording → timer runs, mic indicator may or may not appear 2. Stop → session row appears in Transcripts with correct duration 3. Tap session row → "No transcript segments" message 4. No audio file is written to `/data/data/com.voicetranscriber/files/` or external storage 5. No error message is shown to the user; the silent failure is not visible ## Impact - The entire "Transcripts" view is non-functional on FireOS until a Whisper model is downloaded AND LOCAL_WHISPER is selected as the active backend - The app gives no indication that the recording failed — users assume their voice was captured - The Speaker/Subject chip selection during recording is lost because the session has no segments to attribute - All downstream features (Notes, Search, Diarization, Topic Extraction, Summarization, Session Tags) are unreachable because they all gate on `segments.isNotEmpty()` ## Suggested fix directions 1. **Surface a visible error** when all backends fail: the Recording screen should show "Recording failed — no transcription backend available. Download a Whisper model or check your microphone permissions." instead of silently showing a 0-segment session. 2. **Auto-record the raw audio** via `MediaRecorder` even if the SpeechRecognizer backend fails, so users at least get a `.m4a` file that can be transcribed later. 3. **Fix the LOCAL_WHISPER BackendConfigScreen bug** (companion issue) so users can promote LOCAL_WHISPER to the top of the priority list before the ANDROID/FIREOS backends. 4. **Fix the FireOS SpeechRecognizer binding** — either request a special permission for `amazon.speech.sim/...` on FireOS devices, or detect FireOS and skip the ANDROID/FIREOS backends entirely when LOCAL_WHISPER is the only realistic option. ## Evidence - DB before fix: `(1, 'Untitled recording', 1789098115153, 1789098127684, None, None)` — 12s test, no audio - DB after fix: `(2, 'Untitled recording', 1789098766618, 1789098897057, None, None)` — 2m 10s test, no audio - Logcat timestamps from the 2m 10s attempt: `20:52:46.755` → `20:52:46.759` — both ANDROID and FIREOS fail in 4ms - Models screen DOES list Whisper models for download, but LOCAL_WHISPER card is missing from the BackendConfigScreen priority list (companion issue) Reported by Hermes on 2026-09-10 during smoke testing of v1.0 (build from 93b7fd1) on Fire HD KFTRWI (G001KT05122500T3).
Mark 2026-09-14 16:40:36 +00:00
Sign in to join this conversation.
No description provided.