• Tutorial: Windows/Android privacy de-googled STT optimized for speed

    From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Thu Apr 30 02:53:08 2026
    From Newsgroup: comp.mobile.android

    Tutorial:
    HeliBoard keyboard & WhisperIME STT on a low-end Samsung for privacy,
    speed & stability set up & tested completely from Windows.

    As always, please help everyone if I've made any errors or omissions.

    Note: The entire setup & testing was done using scrcpy & adb
    on Windows over USB with Developer Options USB Debugging turned on.

    I never once had to even touch the phone, and, if the phone was on
    Wi-Fi, it could have been anywhere in the house on the LAN.

    1. Obtain and install the HeliBoard apk
    Name: HeliBoard_3.9-release.apk
    Size: 22559621 bytes (21 MiB)
    SHA256: 4CCCF4943AD4E5FCE218EC47153C57A783C56B12A3C18D82FF0D36686EFB837D

    adb install HeliBoard_3.9-release.apk

    2. Enable HeliBoard as an available input method
    This registers the keyboard with the Android system so it can be selected.
    adb shell ime enable helium314.keyboard/.latin.LatinIME

    Note we cannot set a keyboard as default until we enable it first.

    3. Set HeliBoard as the active default keyboard
    This physically switches the on-screen keyboard to HeliBoard immediately.
    adb shell ime set helium314.keyboard/.latin.LatinIME

    4. Check that the voice input is turned on (it ususaly is, by default)
    adb shell am start -n helium314.keyboard/.settings.SettingsActivity
    HeliBoard Settings > Toolbar > Select toolbar keys > Voice input = on

    5. Obtain & install the WhisperIME engine
    Name: org.woheller69.whisper_36.apk
    Size: 22593805 bytes (21 MiB)
    SHA256: 39DF3E8200B9BD9697E97693DDF81D61E928C6E526FD76F0B5BFCC6911534192

    Note that WhisperIME is not the same as Whisper+.cpp but they're similar.

    adb install org.woheller69.whisper_36.apk

    Note: It's critical to NOT open the woheller69 Whisper app on Android yet!
    It's not intuitive that the woheller69 app has almost no settings whatsoever.
    Upon its first launch, the WhisperIME app checks its internal data folder
    (/Android/data/org.woheller69.whisper/files/) for specifically named models.
    This is hard coded. The app will download the models if they don't exist.
    If it finds the folder empty, it triggers a "Force Download" prompt for
    the ~435MB Multilingual Base model. There is no other option.
    WhisperIME is minimalistic, but that is too large for our low-end Samsung.
    By staying out of the app now, we can "pre-seed" that /files/ folder with
    the ~40MB Tiny English model first. When we finally open the WhisperIME app,
    it will see the files with the correct name (even as the size is different).
    This tricks the app into assuming setup finished, which allows us to use
    the smallest language files possible in the minimalist woheller69 app.

    6. Obtain the WhisperIME tflite tiny model
    Name: whisper-tiny.en.tflite
    Size: 42103936 bytes (40 MiB)
    SHA256: 632F4014EC3F9C714A9500B08902F6490F611F06DD3E7021D9FED79888220ABB

    7. Fake the first time Whisper starts into thinking it has the larger model

    When WhisperIME starts up, it's *hard coded* to look for a file named
    whisper.tflite, which, if it doesn't exist, triggers the download of
    a massive ~435MB file, which this trick is intended to avoid happening.

    There is no way around this hard-coded file name in the GUI.
    Unlike Whisper+.cpp, there are no settings in WhisperIME.
    Hence, there is no "Install" option in WhisperIME.
    There is just the "Download" option in WhisperIME.

    To get past that restriction, just give it the file "name" it wants.

    Create the target directory:
    adb shell "mkdir -p /storage/emulated/0/Android/data/org.woheller69.whisper/files"

    Note: We need to make the target directory because WhisperIME hasn't run yet.
    /storage/emulated/0/Android/data/org.woheller69.whisper/files/

    Push the tiny tflite model into that directory but copy it also
    to what WhisperIME expects the name to be (which can be deleted later).

    adb push whisper-tiny.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/
    adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper.tflite"

    Note: Pushing this ~40MB file to whisper.tflite satisfies the app's
    internal launch check without requiring the ~435mb download.

    Note that WhisperIME works differently after the first startup!

    On the second and successive startups, WhisperIME doesn't just look
    for one file anymore. WhisperIME scans the file directory which,
    since we will set WhisperIME to "English, only fast", means it looks
    for a file named whisper-tiny.en.tflite in that same directory.

    8. Grant microphone permission to WhisperIME
    adb shell pm grant org.woheller69.whisper android.permission.RECORD_AUDIO

    Note: HeliBoard doesn't need microphone permission because it hands the
    microphone task off to the voice-recognition service (i.e., Whisper).

    9. Set Whisper to be the global voice-recognition provider

    On de-googled devices, the standard "Voice Input" menus are missing.
    Hence, use ADB to manually set WhisperIME as the system-wide
    voice recognition provider so it works inside HeliBoard & in other apps.

    adb shell settings put secure voice_recognition_service org.woheller69.whisper/com.whispertflite.WhisperRecognitionService

    Note that using adb to set the voice_recognition_service is the
    only way to get true STT on de-Googled ROMs or on debloated Samsung
    devices because the system settings menu for Voice Input often
    disappears entirely. This happens because that menu is usually
    hard-coded to look for com.google.android.googlequicksearchbox
    or Samsung's Bixby.

    Note this setup does not create or touch any digital assistant
    where a digital assistant listens for keywords like "Hey Google".
    Because it isn't an assistant, it doesn't run a constant background
    check waiting for a wake-word. It only activates when you tap the
    mic button.

    10. Optimize for stability on low-end Samsung devices.

    Low-end Samsung devices are shockingly aggressive with memory management.
    Hence, explicitly whitelist WhisperIME to keep it from being killed mid-sentence.

    a. Whitelist from Deep Sleep
    adb shell dumpsys deviceidle whitelist +org.woheller69.whisper

    b. Allow background activity
    adb shell cmd appops set org.woheller69.whisper RUN_ANY_IN_BACKGROUND allow

    c. Bypass the Phantom Process Killer (Android 12+) for less-powerful CPUs
    adb shell cmd device_config put activity_manager max_phantom_processes 2147483647

    d. Grant permission for the minimalistic listening pop-up overlay
    adb shell "appops set org.woheller69.whisper SYSTEM_ALERT_WINDOW allow"

    11. Optimize Whisper using the hidden settings activity
    adb shell am start -n org.woheller69.whisper/com.whispertflite.WhisperRecognitionServiceSettingsActivity

    This brings up a hidden menu where the following can be set:
    Whisper Voice Input
    Model: English, only fast
    Language: Detect language (grayed out)
    Simplified Chinese [_]

    12. Now we can safely open the WhisperIME app by tapping on the app icon.
    When it runs for the first time, it will scan the directory, see the
    pre-seeded ~40MB whisper.tflite & skip the massive ~435MB download.

    Whisper opens to its main activity com.whispertflite.MainActivity
    If necessary, set it to the same settings as in the service above.
    Model: English only, fast
    Language: Detect language (grayed out)
    Status
    Append [_]
    Translate to English [_]

    13. Set the Whisper listening dialog overlay to automatic
    (also called a voice overlay or the STT interface)

    First, bring up the Whisper listening dialog to it's default
    adb shell am start -n org.woheller69.whisper/com.whispertflite.WhisperRecognizeActivity

    Note that the default is to require a manual press the mic & hold while
    speaking. Tap the (A) to switch to automatic voice activity detection.

    Note that you can bring that overlay up anywhere, even on the home screen,
    although it will be mostly used to replace the keyboard when speaking.

    14. Add the mic icon to the Heliboard toolbar
    Access the mic shortcut
    Open the keyboard and long-press the Comma (,) key.
    This allows you to pin the mic for one-tap access
    Drag the mic icon onto the toolbar as desired

    15. Test.
    a. From the homescreen, open up the default SMS/MMS app
    b. Select a contact or group
    c. Tap in the text box (HeliBoard should come up)
    d. Type into the text field (if desired)
    e. Then press the mic button in HeliBoard
    f. This should bring up the Whisper overlay in (A) automatic mode
    g. Start speaking (the progress bar should indicate activity)
    h. When you stop speaking, two things should happen right away
    i. There will be the transcribed text in the text box
    ii. And the keyboard should have returned automatically
    i. Voila!

    16. Debug
    Check active keyboard
    adb shell settings get secure default_input_method
    Expected output:
    helium314.keyboard/.latin.LatinIME
    Check active voice service
    adb shell settings get secure voice_recognition_service
    Expected output:
    org.woheller69.whisper/com.whispertflite.WhisperRecognitionService
    Verify whitelist status
    adb shell dumpsys deviceidle whitelist | grep whisper
    Expected output:
    user,org.woheller69.whisper,10843
    Check on the Whisper process
    adb shell ps -ef | grep whisper
    Expected output:
    u0_a843 21962 902 1 00:06:23 ? 00:00:33 org.woheller69.whisper
    Check microphone usage logs
    adb shell appops query-op android:record_audio allow | grep whisper
    Expected output:
    org.woheller69.whisper
    Verify the model file name and location
    adb shell ls -l /storage/emulated/0/Android/data/org.woheller69.whisper/files/
    Expected output (simplified)
    whisper-tiny.en.tflite (The working model)
    whisper.tflite (The decoy/setup flag)
    filters_vocab_en.bin (The logic file)

    Note WhisperIME automatically downloads .bin files the first time
    a voice recognition attempt occurs.

    Check the list of currently enabled keyboards
    adb shell "ime list -s | grep -E 'helium|whisper'"
    Expected output:
    helium314.keyboard/.latin.LatinIME
    org.woheller69.whisper/com.whispertflite.WhisperInputMethodService
    Confirm Whisper is actually using the 40MB tiny model:
    adb logcat -c
    Tap the HeliBoard mic button to wake up whisper, and then run
    adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
    Expected output:
    Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite

    This confirms the phone is 100% independent of Google/Samsung voice servers.
    --
    On Usenet, wizened old men discuss topics of interest, where each adds
    their own flavor of value so that the group, as a whole, benefits greatly.
    --- Synchronet 3.21f-Linux NewsLink 1.2
  • From Alan Peeling@Alan@invalid.co.uk to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Thu Apr 30 12:15:27 2026
    From Newsgroup: comp.mobile.android

    On 30/04/2026 09:53, Maria Sophia wrote:
    The entire setup & testing was done using scrcpy & adb
    on Windows over USB with Developer Options USB Debugging turned on...
    if the phone was on
    Wi-Fi, it could have been anywhere in the house on the LAN.

    Does this mean SCRCPY can work over Wi-Fi? If so how is it done?
    --
    Alan
    --- Synchronet 3.21f-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Thu Apr 30 05:39:18 2026
    From Newsgroup: comp.mobile.android

    Alan Peeling wrote:
    On 30/04/2026 09:53, Maria Sophia wrote:
    The entire setup & testing was done using scrcpy & adb
    on Windows over USB with Developer Options USB Debugging turned on...
    if the phone was on
    Wi-Fi, it could have been anywhere in the house on the LAN.

    Does this mean SCRCPY can work over Wi-Fi? If so how is it done?

    I set it up and tested it using adb & scrpy over USB but there's no reason
    you can't do the same tasks using adb/scrcpy over Wi-Fi, if you know how.
    <https://i.postimg.cc/pr8NPNKs/scrcpy33.jpg>

    Scrcpy itself doesn't care whether the connection is USB or wireless.
    Scrcpy relies entirely on ADB.
    a. If ADB can connect to your phone over Wi-Fi (and, it can), then
    b. scrcpy will work the same way.

    The problem with Wi-Fi though, and Android, is how you accomplish things
    over Wi-Fi varies greatly depending on which Android version you have.
    <https://i.postimg.cc/KvTvtMS8/scrcpy31.jpg>

    Android 10 and below requires a one-time USB connection to enable ADB over TCP/IP while Android 11+ added ADB pairing, allowing us to connect without
    ever using a USB cable, though the pairing process is a bit more involved.
    <https://i.postimg.cc/pdyTjwnT/scrcpy28.jpg>

    Here are some screenshots in series using both wired and wireless scrcpy.
    I posted these to this newsgroup years ago, during the transition period.
    <https://i.postimg.cc/hjj3tFR9/scrcpy34.jpg> Manage Android from Windows
    <https://i.postimg.cc/pr8NPNKs/scrcpy33.jpg> sndcpy is the default now
    <https://i.postimg.cc/zGNNXftK/scrcpy32.jpg> ADB port errors creep up
    <https://i.postimg.cc/KvTvtMS8/scrcpy31.jpg> HNS stop/start solution
    <https://i.postimg.cc/WbpYsfqg/scrcpy30.jpg> Windows Update is the problem
    <https://i.postimg.cc/Hs1ZZ5H0/scrcpy29.jpg> net stop hns & net start hns
    <https://i.postimg.cc/pdyTjwnT/scrcpy28.jpg> Android assigns random ports
    <https://i.postimg.cc/25XrGW9R/scrcpy27.jpg> Nobody can find locked ports
    <https://i.postimg.cc/Dz1rcpDX/scrcpy26.jpg> Windows Update locks ports
    <https://i.postimg.cc/tgvzsMRm/scrcpy25.jpg> Connect over Wi-Fi sans USB
    <https://i.postimg.cc/Hnw59ZHm/scrcpy24.jpg> Compare Vysor to scrcpy
    <https://i.postimg.cc/mrz6gJpC/scrcpy23.jpg> Android SMS/MMS on Windows
    <https://i.postimg.cc/c4Wq5x9j/scrcpy22.jpg> Vysor IP address option
    <https://i.postimg.cc/9FJMKYch/scrcpy21.jpg> Windows Drive: === Android
    <https://i.postimg.cc/Y9jbTtcN/scrcpy20.jpg> Start /b as a CMD works! :)
    <https://i.postimg.cc/3R6nTz7s/scrcpy19.jpg> Start /b TARGET fails :(
    <https://i.postimg.cc/Y93b1z0n/scrcpy18.jpg> Free Automation APKs
    <https://i.postimg.cc/bvRXdbxg/scrcpy17.jpg> AutoIT & IFFT & Automate
    <https://i.postimg.cc/5NrK7jtg/scrcpy16.jpg> powershell hide-console trick
    <https://i.postimg.cc/g2yNftw0/scrcpy15.jpg> Trick to pin batch shortcut
    <https://i.postimg.cc/XqZsmVFM/scrcpy14.jpg> AppPath & shortcut TARGET
    <https://i.postimg.cc/CxXH6N2r/scrcpy13.jpg> No scrcpy console window!
    <https://i.postimg.cc/yYKNnHxD/scrcpy12.jpg> REG test of showwin.lnk
    <https://i.postimg.cc/7LWJhWxq/scrcpy11.jpg> Shortcut test of showwin.lnk
    <https://i.postimg.cc/fyWw2nXh/scrcpy10.jpg> The console came up :(
    <https://i.postimg.cc/66Gn2t2g/scrcpy09.jpg> REG test of showwin.bat
    <https://i.postimg.cc/nV6K0Cfn/scrcpy08.jpg> CMD test of showwin.bat
    <https://i.postimg.cc/hjkVFyqJ/scrcpy07.jpg> Android mnt as drive letter
    <https://i.postimg.cc/Sx1hgWmY/scrcpy06.jpg> Press two hardware buttons
    <https://i.postimg.cc/wvsbcNBz/scrcpy05.jpg> Drag APK from Windows
    <https://i.postimg.cc/Y00vx4yp/scrcpy04.jpg> Extraneous cmd window (&)
    <https://i.postimg.cc/Vvrq0K0m/scrcpy03.jpg> The efficient setup explained
    <https://i.postimg.cc/tTmdgKTB/scrcpy02.jpg> An efficient program setup
    <https://i.postimg.cc/N0G1TXcZ/scrcpy01.jpg> Mirror Android on any PC

    But personally, I've given up on wireless adb/scrcpy because Android makes
    it that you MUST touch the phone at least once, which is what I deplore.
    --
    If we think we understand something, we don't. But if we think we don't
    quite yet understand something, then we're just beginning to understand it
    --- Synchronet 3.21f-Linux NewsLink 1.2
  • From Alan Peeling@Alan@invalid.co.uk to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Thu Apr 30 21:50:16 2026
    From Newsgroup: comp.mobile.android

    On 30/04/2026 12:39, Maria Sophia wrote:
    Here are some screenshots in series using both wired and wireless scrcpy.
    Thanks for your very comprehensive post. My experience so far has been
    that SCRCPY on USB works some of the time And SCRCPY on Wi-Fi won't
    connect at all. As Wi-Fi connection seems to be a lot more faff than USB connection I think I'll forget about it.
    --
    Alan
    --- Synchronet 3.21f-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Thu Apr 30 15:33:40 2026
    From Newsgroup: comp.mobile.android

    Alan Peeling wrote:
    On 30/04/2026 12:39, Maria Sophia wrote:
    Here are some screenshots in series using both wired and wireless scrcpy.
    Thanks for your very comprehensive post. My experience so far has been
    that SCRCPY on USB works some of the time And SCRCPY on Wi-Fi won't
    connect at all. As Wi-Fi connection seems to be a lot more faff than USB connection I think I'll forget about it.

    I don't disagree with you that adb over wireless debugging is a bitch
    because of Android security making certain you have access to the phone.

    You can tell I get around stuff like that from my tutorial, but I have
    never been able to get past that purposeful wireless-debugging security.

    In the end, for others to know, adb/scrcpy works fine over USB or Wi-Fi,
    but you must have physical access to the phone for the initial steps.

    If you don't like scrcpy/sndcpy, you could try the free Vysor tool.
    Vysor works with iOS & Android, while scrcpy works only with Android.

    <https://i.postimg.cc/xdSMtBkn/vysor36.jpg> scrcpy vs Vysor resolution
    <https://i.postimg.cc/TYvqdxCT/vysor35.jpg> iOS & Android PC mirroring
    <https://i.postimg.cc/k5gv0yw8/vysor34.jpg> Apple iOS & Android mirroring
    <https://i.postimg.cc/Njg6Xx3V/vysor33.jpg> Preparing Vysor on device
    <https://i.postimg.cc/xjz3V8Gs/vysor32.jpg> ScrCpy vs Vysor PC mirror
    <https://i.postimg.cc/k4K8dZqv/vysor31.jpg> Random MAC address is static
    <https://i.postimg.cc/nchSVcmS/vysor30.jpg> Static/Reserved IP address
    <https://i.postimg.cc/XqrD5Hqm/vysor29.jpg> Removing Apple iTunes crap
    <https://i.postimg.cc/KYbVWDp3/vysor28.jpg> Nuking Apple shitware 1 by 1
    <https://i.postimg.cc/MGbkZFfY/vysor27.jpg> The bloatware is everywhere
    <https://i.postimg.cc/hP6R2xqV/vysor26.jpg> iTunes crapware won't install
    <https://i.postimg.cc/fTy57WSY/vysor25.jpg> Best iOS drivers installed
    <https://i.postimg.cc/3wmtyL46/vysor24.jpg> Apple Device working properly
    <https://i.postimg.cc/tCvS8nGr/vysor23.jpg> iPad is connected to Win10
    <https://i.postimg.cc/Kz7pW9mL/vysor22.jpg> Apple Win10 iOS drivers suck
    <https://i.postimg.cc/QdVPMkqG/vysor21.jpg> Apple iPad on Win10 over USB
    <https://i.postimg.cc/J7cSYhhg/vysor20.jpg> Classic Apple error 2502
    <https://i.postimg.cc/yxP5DL5B/vysor19.jpg> Classic Apple error 2503
    <https://i.postimg.cc/V6X28fWJ/vysor18.jpg> Apple Mobile Device Support
    <https://i.postimg.cc/ZqB1wF9F/vysor17.jpg> Install Apple AMDS engine
    <https://i.postimg.cc/Jzdf3dhz/vysor16.jpg> Classic Apple Error Code 2503
    <https://i.postimg.cc/c4TyCJyY/vysor15.jpg> Apple Mobile Device Support
    <https://i.postimg.cc/SRhF22xL/vysor14.jpg> Connect over the Internet
    <https://i.postimg.cc/bv4jPFXB/vysor13.jpg> Vysor Camera virtual webcam
    <https://i.postimg.cc/XvPnJY5x/vysor10.jpg> Vysor Windows Virtual Camera
    <https://i.postimg.cc/wxL9qHjc/vysor11.jpg> Vysor searches for Android/iOS
    <https://i.postimg.cc/2S2zsw8s/vysor09.jpg> Classic Apple Error code 2503
    <https://i.postimg.cc/sg6r6gTy/vysor12.jpg> Vysor easily finds Android
    <https://i.postimg.cc/yYCYcxbb/vysor08.jpg> Apple Mobile Device Support
    <https://i.postimg.cc/Y2WCvYbF/vysor07.jpg> iOS requires Apple AMDS kluge
    <https://i.postimg.cc/ydJYXZKw/vysor06.jpg> Remote mirror over the net
    <https://i.postimg.cc/d0V03fxQ/vysor05.jpg> Vysor Internet mirroring
    <https://i.postimg.cc/XY3qSqKC/vysor04.jpg> Vysor ADB USB setup switches
    <https://i.postimg.cc/v8gc5pHc/vysor03.jpg> Vysor remote sharing
    <https://i.postimg.cc/V6TPYG3h/vysor02.jpg> Vysor console operation
    <https://i.postimg.cc/QNwjsCDM/vysor01.jpg> Vysor Android/iOS PC mirroring
    --
    On Usenet, everyone is an expert in something that they can impart to all.
    --- Synchronet 3.21f-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Sat May 2 18:19:27 2026
    From Newsgroup: comp.mobile.android

    Maria Sophia wrote:
    This confirms the phone is 100% independent of Google/Samsung voice servers.

    My recommendation?
    a. Low end Android => use HeliBoard + WhisperIME STT
    b. High end Android => try the all-in-one Futo Keyboard

    Both can be completely installed & managed from the Windows PC.
    You never need to touch Android to set it up and use it if it's close by.

    Note that the current HeliBoard/WhisperIME stack is a modular DIY approach.
    The advantage being WhisperIME tiny is the lightest STT option available.

    Yet, FUTO is an all-in-one solution that brings its own set of trade-offs.
    Both are designed for privacy.

    If you have a beefier Android, I would suggest first trying Futo Keyboard.
    a. FUTO includes its own Whisper-based voice engine inside the keyboard.
    b. FUTO uses the GGML/whisper.cpp format rather than .tflite.
    c. FUTO's UI is generally more helpful than the minimalistic WhisperIME is.

    However, because FUTO is an all-in-one app, it holds the keyboard logic,
    the swipe-typing engine (Llama-based) and the voice engine in the same
    process space. On my low-end Samsung, this can lead to keyboard lag.

    For speed & stability on a low-end device, HeliBoard + WhisperIME has its place, but FUTO is far more polished and user-friendly for normal users.

    Both are fully offline, so my suggestion is binary.
    a. If you're on a low-end device, consider HeliBoard + WhisperIME STT
    b. If you are on a beefy device, consider the all-in-one Futo Keyboard
    --
    On Usenet, shared experience saves someone else a long night of guessing.

    .
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Wed May 6 20:37:28 2026
    From Newsgroup: comp.mobile.android

    Maria Sophia wrote:
    a. Low end Android => use HeliBoard + WhisperIME STT
    b. High end Android => try the all-in-one Futo Keyboard

    Testing takes time...

    I'm having trouble with the tiny models in a noisy environment,
    with the transcription taking too long or not working at all.

    It seems the AGC on the mic is allowing too much noise to filter through.

    First, I confirmed the small models are running by running adb logcat.
    "testing testing 123"

    Since, at home, you never need to touch the phone itself, from Windows:
    adb shell logcat -c
    adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
    --------- beginning of main
    D/WhisperEngineJava: Model is
    loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
    D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
    D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
    D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin

    Where the specgtrogram was too big for such as small sentence:
    D/WhisperEngineJava: Calculating Mel spectrogram...
    D/WhisperEngineJava: Mel spectrogram is calculated...!
    D/WhisperEngineJava: output_len: 449

    So to lower the mic sensitivity on the Samsung A32-5G, I ran:
    adb shell settings put global call_noise_reduction 1
    adb reboot

    Re-run "testing, testing, 123"
    adb shell logcat -c
    adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
    --------- beginning of main
    D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
    D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
    D/WhisperEngineJava: Calculating Mel spectrogram...
    D/WhisperEngineJava: Mel spectrogram is calculated...!
    D/WhisperEngineJava: output_len: 449
    D/WhisperEngineJava: Skipping token: 50257, word: [_SOT_]
    D/WhisperEngineJava: Detected language code: en
    D/WhisperEngineJava: Skipping token: 50259, word: [_extra_token_50259] D/WhisperEngineJava: It is Transcription...
    D/WhisperEngineJava: Skipping token: 50359, word: [_extra_token_50359] D/WhisperEngineJava: Skipping token: 50363, word: [_BEG_]
    D/WhisperEngineJava: Skipping token: 50413, word: [_TT_50]
    D/WhisperEngineJava: Skipping token: 50513, word: [_TT_150] D/WhisperEngineJava: Inference is executed...!

    Drat. It's still 449.

    If that doesn't work in noisy environments, then I'll have to bump up
    to the next-sized model, which I think is the base model.

    adb push whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/
    adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper.tflite"
    adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite"
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Paul@nospam@needed.invalid to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Fri May 8 02:31:26 2026
    From Newsgroup: comp.mobile.android

    On Wed, 5/6/2026 10:37 PM, Maria Sophia wrote:
    Maria Sophia wrote:
    a. Low end Android => use HeliBoard + WhisperIME STT
    b. High end Android => try the all-in-one Futo Keyboard

    Testing takes time...

    I'm having trouble with the tiny models in a noisy environment,
    with the transcription taking too long or not working at all.

    It seems the AGC on the mic is allowing too much noise to filter through.

    First, I confirmed the small models are running by running adb logcat.
    "testing testing 123"

    Since, at home, you never need to touch the phone itself, from Windows:
    adb shell logcat -c
    adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
    --------- beginning of main
    D/WhisperEngineJava: Model is
    loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
    D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
    D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
    D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin

    Where the specgtrogram was too big for such as small sentence:
    D/WhisperEngineJava: Calculating Mel spectrogram...
    D/WhisperEngineJava: Mel spectrogram is calculated...!
    D/WhisperEngineJava: output_len: 449

    So to lower the mic sensitivity on the Samsung A32-5G, I ran:
    adb shell settings put global call_noise_reduction 1
    adb reboot

    Re-run "testing, testing, 123"
    adb shell logcat -c
    adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
    --------- beginning of main
    D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
    D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
    D/WhisperEngineJava: Calculating Mel spectrogram...
    D/WhisperEngineJava: Mel spectrogram is calculated...!
    D/WhisperEngineJava: output_len: 449
    D/WhisperEngineJava: Skipping token: 50257, word: [_SOT_] D/WhisperEngineJava: Detected language code: en
    D/WhisperEngineJava: Skipping token: 50259, word: [_extra_token_50259] D/WhisperEngineJava: It is Transcription...
    D/WhisperEngineJava: Skipping token: 50359, word: [_extra_token_50359] D/WhisperEngineJava: Skipping token: 50363, word: [_BEG_] D/WhisperEngineJava: Skipping token: 50413, word: [_TT_50] D/WhisperEngineJava: Skipping token: 50513, word: [_TT_150] D/WhisperEngineJava: Inference is executed...!

    Drat. It's still 449.

    If that doesn't work in noisy environments, then I'll have to bump up
    to the next-sized model, which I think is the base model.

    adb push whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/
    adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper.tflite"
    adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite"


    It missed the word "It's" in the picture.

    [Picture] dsnote-ubu2504.gif

    https://imgur.com/a/9VxuCCa

    https://postimg.cc/CRrHVQXP

    That's "dsnote" in Ubuntu using a Whisper model.
    I read the text of the lines above, and the model
    missed the "It's" on the recorded attempt. A
    previous attempt was OK.

    Microphone was a Blue Yeti. Which doesn't have AGC.
    And the level wasn't all that high either, maybe
    -24dBm or so. I recorded the microphone first in
    Audacity, to see I had to hold the mike two inches
    from my face to get a signal.

    While the spec for the microphone claims a 20-20000Hz
    response (which would be 3dB down at the ends),
    it is clearly a "voice" microphone and it
    cuts off the high frequencies. That's one of the reasons
    the fans in the room didn't get picked up. So as far as
    being a "live" mic, it's a bit of a "dull potato" as
    mics go. But it does seem to give a decent result.

    And when you "blast" the four lines above at the model,
    then stop and wait for the conversion, it must have taken
    at least 10-15 seconds to do the amount of text in the picture.
    It "feels" slightly better, if you feed it a sentence at a time.
    Feed it just a few words. It seems happier that way. Dragon
    Naturally Speaking has nothing to worry about :-)

    Paul
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Maria Sophia@mariasophia@comprehension.com to comp.mobile.android,alt.comp.os.windows-10,alt.comp.microsoft.windows on Fri May 8 01:09:32 2026
    From Newsgroup: comp.mobile.android

    Paul wrote:
    That's "dsnote" in Ubuntu using a Whisper model.
    I read the text of the lines above, and the model
    missed the "It's" on the recorded attempt. A
    previous attempt was OK.

    Microphone was a Blue Yeti. Which doesn't have AGC.
    And the level wasn't all that high either, maybe
    -24dBm or so. I recorded the microphone first in
    Audacity, to see I had to hold the mike two inches
    from my face to get a signal.

    While the spec for the microphone claims a 20-20000Hz
    response (which would be 3dB down at the ends),
    it is clearly a "voice" microphone and it
    cuts off the high frequencies. That's one of the reasons
    the fans in the room didn't get picked up. So as far as
    being a "live" mic, it's a bit of a "dull potato" as
    mics go. But it does seem to give a decent result.

    And when you "blast" the four lines above at the model,
    then stop and wait for the conversion, it must have taken
    at least 10-15 seconds to do the amount of text in the picture.
    It "feels" slightly better, if you feed it a sentence at a time.
    Feed it just a few words. It seems happier that way. Dragon
    Naturally Speaking has nothing to worry about :-)

    Hi Paul,

    Thanks for testing it out. I think there's a reason that the WhisperIME defaults to the 435MB model instead of the "tiny" model of 40MB.

    I agree with EVERYTHING you said (I'd never disagree with anything that is logically sensibly stated). What I want to say is that when it's quiet, it works "just OK" for the tiny model.

    I'm gonna switch to the default 435MB model and see if that does better.
    But I agree with you. YMMV.

    When it's noisy (like in a vehicle), the tiny model really sucks.
    So I guess we're doomed to have to use the largest model most of the time.

    I'm told (by the Internet) that the Futo Keyboard works better as it's more modern and it uses the C++ whisper models (if that matters).

    If I were to do it over again, I'd try that first.

    But I do THANK YOU VERY MUCH for testing this out for the team.
    People like you are wonderful because we all benefit from your efforts!

    What's really neat is that Windows/Linux controls the phone wonderfully.
    I never have to touch the phone when I'm sitting at my desk.
    a. adb controls the phone
    b. scrcpy/sndcpy displays the phone
    c. the keyboard types into the phone
    d. the mouse taps on the phone

    It's really neat having the phone show up as nearly two feet tall!
    --- Synchronet 3.22a-Linux NewsLink 1.2