Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

A voice notebook that can not phone home: on-device Whisper on Android

Description and use

Android app that records, transcribes, and stores voice notes locally without internet, using Whisper.cpp and VAD.

Problem

Create a voice notebook that records, transcribes, and stores speech locally without internet access.

Outcome

The app records and transcribes speech locally, filters noise, stores text per session, and works offline without internet permission.

Workflow

  • 1. Start foreground service with microphone permission and ongoing notification.
  • 2. Capture 16 kHz mono audio frames with energy VAD (pre-roll and hangover).
  • 3. Discard silence; send speech segments to whisper.cpp (base.en, q5_1, ~57 MB, arm64).
  • 4. Apply rules judge: drop segments <4 words, filler-only, near-duplicates by token overlap.
  • 5. Append kept lines to session‑<date>.txt; generate short local digest on START/STOP.
  • 6. Ensure app has no INTERNET permission; use <queries> for SpeechRecognizer on Android 11+.
  • 7. Host APK via a one‑page site with a download button to avoid browser download issues.

Evidence

The app never gets the INTERNET permission. Not "we promise we don't upload." The manifest does not include it.

Source

A small energy VAD runs over 16 kHz mono frames: a pre-roll so it catches the start of a sentence, a short hangover so it doesn't clip the end. Silence is never stored, and never leaves.

Source

Speech segments go to whisper.cpp (base.en, q5_1, ~57 MB, bundled as an uncompressed asset, arm64).

Source

The first build used the system SpeechRecognizer. On Android 11+ the app cannot see the speech service unless the manifest declares a <queries> entry for android.speech.RecognitionService.

Source

Distribution, not code, was the wall. A raw APK link on Android does not reliably open in a browser.

Source

  • Record date: 2026-10-07T02:55:54.876Z