Unable to save export srt and test of low RAM phone.
I am an end user (not a developer) testing the prebuilt APKs from https://github.com/k2-fsa/sherpa-onnx/releases/tag/flutter on a low-RAM phone. Two topics: (1) Export SRT fails on Android 13, (2) low-RAM test results for all the file-transcription APKs.
- Bug: Export SRT produces no file on Android 13
After transcribing a file, tapping Export SRT and choosing a save path shows this error in the app status box:
Error saving SRT: PathAccessException: Cannot open file, path = '/storage/emulated/0/Onnx/P.srt' (OS Error: Operation not permitted, errno = 1)
No file is written (checked Downloads and Documents). I tried the standard Download folder and a manually created folder — same error. The demo apps declare no permissions at all (Android App info shows "No permissions allowed / No permissions denied" — screenshot attached), so nothing can be granted manually. The write goes directly to /storage/emulated/0/..., which Android 11+ blocks for apps without storage permission. The same direct-path write works on Windows/Linux/macOS, so this looks like a cross-platform code path untested on Android.
Was saving intentionally left out to keep the demos simple? If not, two zero-permission fixes exist on Android 10+:
- save the SRT to the app's own files dir and show the exact path, or
- open the share sheet (e.g. share_plus) or a SAF "create document" picker so the user saves it anywhere.
2. Low-RAM test results (all arm64-v8a, same 2-minute clips)
| APK | Size | Result on 2GB RAM |
|---|---|---|
| moonshine-tiny-en | 135MB | works |
| sense-voice | 277MB | works |
| nemo-parakeet-v3-eu | 585MB | works (best English accuracy, survives fast speech) |
| fire-red-asr2-ctc-zh-en | 626MB | 1st run crashes at "Run VAD"; 2nd run works. Chinese news audio OK (12+ segments). English accuracy weak |
| funasr-nano | 914MB | Init error: "Failed to create offline" (full log below) |
| qwen3-asr | ~900MB | not tested — LLM-based, same class as funasr-nano |
Pattern: CTC/transducer models run even at ~585MB; the LLM-based funasr-nano fails at ~914MB. A size / minimum-RAM column in the release tables would help users on small phones before downloading ~1GB.
3. Small docs note
The "ASR model: ... — download" link above each release table looks required for end users, but the APK already contains the model. A "(for developers only)" note would prevent wasted downloads — I downloaded the 520MB model before realizing this.
4. Workaround found for long subtitle cues
Segment counts were identical across ASR models on the same clip (8 segments for a 2-min English video, moonshine 6) — segmentation is driven by the shared Silero VAD settings, not the ASR model. For gapless fast speech, VAD hits Max Speech Duration and produces very long segments. Setting Max Speech Duration ≈ 5 s in VAD settings gives much shorter, subtitle-like segments (tested with parakeet). Where the model returns token timestamps (parakeet TDT, CTC models), building short cues (2–6 s) from them would give much better SRT than one cue per VAD segment. For reference: a Play Store app using the same parakeet model on this same 2GB device produces word-level SRT cues — the model already carries the needed timestamps.
Happy to test any new APK on this low-RAM device.
Steps to reproduce
- Install
flutter-vad-non-streaming-asr-from-file-sense-voice-arm64-v8a.apk(or parakeet / any file-transcription demo) on Android 13 - Pick a wav file, run transcription
- Tap Export SRT, choose any path in shared storage (e.g. /storage/emulated/0/Download/ or a custom folder)
- Error appears in the status box; no file is written anywhere
Expected behavior
SRT file is saved (or a share/save dialog opens), so the demo becomes usable as an offline subtitle tool for end users.
Environment
sherpa-onnxversion: prebuilt Flutter APKs from releases/tag/flutter (commit 634265c)- OS: Android 13, Snapdragon 680 (arm64-v8a), 2GB free RAM
- Python version: not used (prebuilt APKs)
- onnxruntime version: bundled in APK
- GPU (if applicable): not used (CPU)
- NPU (if applicable): not used
Source: k2-fsa/sherpa-onnx