From Newsgroup: comp.mobile.android
Even I will admit I don't understand the astoundingly complex and confusing setup on Samsung phones for the triangle of speed, accuracy & privacy for
voice to text input.
Since I log into nothing on Android, when I use the dedicated Copilot app, their crippleware mic button goes online whereas I use Whisper (slow but accurate and private) or Sayboard (fast and private but not accurate) and
when I need to convert huge audio input to text, I use Transcribo (which is
not limited to the length restrictions of the others listed above), etc.
Those offline STT transcription engines are overkill for the constant
texting that we do in PulseSMS (last known good klinker bros version) or in WhatsApp where in those cases, I generally bring up the Openboard or
Heliboard keyboard whose mic button will bring up a fast STT engine.
I have other keyboards installed...
Simple Keyboard
HeliBoard
FlorisBoard
Whisper+ Voice Input
Samsung Keyboard
SayBoard
AnySoftKeyboard
Transcribo
Gboard (requires net access for some features so I don't use it)
But HeliBoard 1.3 is my daily drive since, well, since a long time.
The HeliBoard mic button brings up my STT engine and it works well.
But what happened yesterday is I set scrcpy on Windows to use the physical keyboard (which Android automatically handles, saving a step when using the Windows keyboard to type on the Android phone over the USB or Wi-Fi LAN).
scrcpy -s 192.168.0.10 -K
Where adding the "-K" option apparently impersonates the Android keyboard.
The -K flag in scrcpy stands for UHID (User HID), which is wonderful.
But I had to change one simple setting in Android, which blew things up!
Settings > General management > Physical keyboard >
Show on-screen keyboard = scrcpy
Now when I click on "scrcpy", a "Physical keyboard" activity pops up with
HeliBoard -
OpenBoard - English (US)
Samsung Keyboard - English (US)
Show on-screen keyboard = off
While that works PERFECTLY to skip a step of bringing the Android keyboard
up when mirroring on Windows, it screwed up my keyboard setup on Android.
I broke Android's Input Method Manager (IMM) by enabling scrcpy's -K
physical keyboard impersonation while disabling the on-screen keyboard.
I didn't notice the keyboard setup was screwed up on Android for a whole
day because I only typed (either on the soft keyboard on the phone or using
the hard keyboard on the Windows computer when mirroring over scrcpy).
But today, I tried to use the voice mic, which I've been using for years,
in the soft keyboard and up popped Transcribo for the first time. Huh?
Without scrcpy running, the 'physical keyboard' defaulted to off.
Settings > General management > Physical keyboard >
Show on-screen keyboard = off
The reason HeliBoard looks different in the scrcpy list compared to
OpenBoard and Samsung is that it doesn't have a "Physical Layout" assigned. When a physical keyboard is active, Android stops looking at the virtual microphone button and starts looking for a hardware "Voice Search" key.
Since HeliBoard didn't have a layout assigned, the system defaulted to Transcribo as the "helper" for that physical device .
When I tap on Heliboard I only get language & layouts.
One of which is "English (US), Qwerty style", which I selected.
But I can longpress on the "English (US), Qwerty style" which changed the
list above to have that under the "HeliBoard -" entry in Physical keyboard.
Now when I click on "scrcpy", a "Physical keyboard" activity pops up with
HeliBoard -
English (US), Qwerty style
OpenBoard - English (US)
Samsung Keyboard - English (US)
English (US), Qwerty style
Show on-screen keyboard = off
By long-pressing that layout and seeing it populate the "HeliBoard -"
entry, I apparently manually re-linked the "Driver" to the "Hardware".
More specifically, in Android 13, when I use scrcpy -K, the system treats
the input as a "Hardware Keyboard" event. Because HeliBoard was originally listed with a blank dash (-), the system didn't know how to handle specific function calls (like a microphone trigger) from that "hardware" device. It apparently panicked and grabbed Transcribo because Transcribo likely has a "Hardware Voice Assistant" flag enabled.
By assigning English (US) to HeliBoard in that physical menu, I've now told Android: "HeliBoard owns this USB connection now".
Settings > General Management > Keyboard list and default
Default keyboard = HeliBoard
Longpressing on HeliBoard brings up
Choose input method
(_)AnySoftKeyboard
(_)FlorisBoard
(o)HeliBoard
(_)English (US) OpenBoard
(_)Samsung Keyboard (settings)
(_)Sayboard
On-screen keyboard = off
Show Keyboard button = on
The catch: When Android disables the visual keyboard, it also "suspends"
the custom logic for the active keyboard (HeliBoard). With HeliBoard
suspended, the system looks for the next available "Voice Service" to
handle any stray voice commands and somehow Transcribo became active.
The instant I used -K in scrcpy, Android changed its "Input State."
If Transcribo was the most recently updated "Voice Service" on my phone, Android 13 grabbed it as the default for "Hardware Voice Input".
By manually assigning HeliBoard a layout and by disabling Transcribo, I
thought I had finally closed that loophole. But wait. There's more.
When I unplug usb (disconnecting scrcpy) and go to pulsesms and then tap to create a text, the heliboard comes up with the mic button but when I press
the mic button, now sayboard comes up so I press the little tiny keyboard
on the bottom bar and select HeliBoard but STILL when I click the mic in heliboard, sayboard comes up. Worse, Sayboard is now crashing and when I
grant the mic permission, it says the vosk models are no longer at
/storage/emulated/0/Android/data/com.elishazaria.sayboard/files/Models/en-US/vosk-model-small-en-us-0.15
Sayboard is crashing because it's stuck in a loop.
I went to Settings > Apps > Sayboard & tapped Force stop.
I tapped Storage > Clear Cache
And Permissions > Microphone > Set to "Don't allow"
which, paradoxically, prevents the system from being able to "launch" it
when I tap the mic in HeliBoard.
Also Settings > Apps > Choose default apps digital assistant is none.
Oddly, in Settings > General Management > Keyboard list and default
there is no Google Voice Typing (or Samsung Voice Input) but there is
Samsung Keyboard.
Because I am using HeliBoard v1.3, which is old, the keyboard has no
internal voice logic. It relies entirely on a "System Intent".
Since I disabled Transcribo and have no Google account, Sayboard is the
only app left on my phone that can handle that, but the crash implies Sayboard's file path was likely messed up by the scrcpy physical keyboard session, and now it's trying to launch but can't find the VOSK model.
I'm gonna punt and download the latest HeliBoard version 3.9 which
reputedly solves the "jumping window" problem because the speech-to-text
engine is inside the keyboard so a separate engine is no longer needed.
This is long already, so I'll update it, but my point is that the speech to text with privacy on Android is not as simple as it should have been.
--- Synchronet 3.21f-Linux NewsLink 1.2