Skip to main content

Sysadmin, interested in new technologies, communications, multimedia, accessibility, better Linux than Windows, better Android than IOS and similar.

twitter.com/pvagner

www.facebook.com/pvdeejay

mastodon.sk/@pvagner

Peter Vágner

Building eSpeak-ng for Android with libsonic built-in

2 min read

By a popular demand I have written a few steps how I am building espeak-ng for android.
ESpeak-ng has a optional dependency on a library called libsonic.
It's not critical for its functionality but it allows speeding up synthesised voice so we can get eSpeak-ng speaking at very very fast speech rates.
On linux the build system is configured to take advantage of system wide installation of all the required libraries. This does not nicely apply to the cross compilation for Android as all the libraries have to be prebuilt for the target platform.
And since there is no other distribution channel for the libsonic library other than its git repository with its source code, there are no prebuilt libraries for android.
To workaround this I am cloning libsonic repository, linking its files to the eSpeak-ng source tree and then patching eSpeak-ng source code to include the libsonic files as if these were part of eSpeak-ng it-self.

I am running all this on arch linux, but debian, ubuntu and any other linux distro with gradle, Android-SDK 26, android-sdk-build-tools 28.0.3, recent enough version of android-ndk will work fine.
I like to install all these components via the linux distro package manager.
Espeak-ng Readme has even more details I can write here. There are also some android specific dependencies

If everything is installed here are the commands I can run from the terminal:
mkdir ~/espeak # create a working folder
cd ~/espeak # enter that folder
git clone https://github.com/espeak-ng/espeak-ng.git # clone espeak-ng git repo
git clone https://github.com/espeak-ng/sonic.git # clone libsonic repository
ln -s ../../../sonic/sonic.{c,h} espeak-ng/src/libespeak-ng/ # link sonic files to eSpeak-ng source tree
wget https://files.pvagner.tk/f/e9c6874015fd4241b6c2/?dl=1 -O espeak-ng-libsonic-android.patch # download a patch
cd espeak-ng # change directory to the espeak-ng repo
patch -p1 < ../espeak-ng-libsonic-android.patch # apply the changes from the patch
./autogen.sh # prepare the configure script
./configure --prefix=/usr --with-gradle=gradle --with-extdict-ru --with-extdict-zh --with-extdict-zhy # run the configure script
make apk-debug # build the actual apk

The resulting app is placed in the path android/build/outputs/apk/debug/espeak-debug.apk
You can install this on your device and enjoy fast rates up to 800 WPM.

Peter Vágner

hmmm. I feel we all users relying on its shal start looking for a different platform of choice to the future. https://gitlab.gnome.org/GNOME/gtk/issues/1739

Peter Vágner

can be made accessible when running under linux. It's just that the working patch has not landed for some 10 years... https://bugzilla.abisource.com/show_bug.cgi?id=4736

Peter Vágner

Peter Vágner

Peter Vágner

Built PHP 5.4.45 on RPI3 Arch Linux ARM AARCH64. It took approx two hours.

Peter Vágner

Peter Vágner

Peter Vágner

Peter Vágner

Emacs A11y Tip #2: graphical or pure text console setup

4 min read

In my Emacs A11y Tip #1 I've already touched the topic of this #2 from slightly. I did not explore all the details at the time so I feel I should try to correct this now.
When installing Emacs there are various possible build configurations and some of them have been adopted as a defacto standards meaning analogous packages are available in the multiple linux distributions package repositories. These are emacs, emacs-nox and emacs-gtk2.

Guessing from the package names it's obvious -nox variant has all the graphical dependencies stripped out. That means we will only see text UI when running no matter if we are in a graphical X session or on a text only console. I was expecting full package would therefore be unnecessary for me because it brings in a few more dependencies and the window it presents is inaccessible to orca anyway. So given this reasoning I assumed it might have minimal impact and I won't need X support in my install of Emacs.

My complicated reasoning has proven not to be quite right and X support within emacs might really be usefull. I have found out a few differences between X and no X variants and some of them are serious enough for me to install X support.

  • When X support is installed, emacs kill and copy commands insert the text into the clipboard so it's possible to copy and paste from emacs into other applications and the other way round.
  • No X variant can be also running within a terminal emulator like gnome-terminal. It means you can use orca's flat review to examine its output.
  • When X support is installed Emacs creates its own window seperated from a terminal if emacs is started from a terminal emulator. It is completelly inaccessible to orca and it consumes all the keyboard input so orca even can't receive the insert / capslock key presses. It is possible to decide during runtime when X aware version of emacs is installed if we want / don't want X support. Run
    emacs -nw
    to start emacs with no X support.
  • Installation which also features X support can also be started in pure text only console. In such a case X support won't be used obviously. Emacs should otherwise be as functional as intended. I've found askubuntu answer supporting this argument. Some parts of Emacs appear to inherit native accessibility and I am not sure where this is coming from. For example pressing C-x C-f brings up find interface accessible with Speechd-el but pressing F10 shows up GTK2 based menu bar and activating Open... from the File menu pops up GTK2 native file chooser dialog.
  • emacs-gtk2 has X support and as an addition it also features mixture of its natural UI with some GTK2 based widgets. I don't know if there is something usefull for us here.

Given the fact there is no complete full browser inside Emacs, copy and paste is really essential. Additionally it is possible to configure Emacs to open web links in 3rd party apps so depending if you are in X or not you can configure to open these in Firefox or elinks directly.

There might be other notable differences when running emacs within X session or pure text console for example gpg agent setup or integration with other 3rd party tools. If I find it to be significant enough I will post a new tip.
I don't consider emacs with gtk+2 support particularly appealing just yet because it does not appear to be practical switching between operating system native and emacs specific screen reading app.

Update: Originally I have assumed graphical ATK accessible menu is only within emacs-gtk2, however it's also present in the original emacs with no GTK support. It sounds a bit dissapointing that we have no speechd-el accessible menu in this mode. But using keyboard shortcuts and other things is worth the trade I think.

Update2: Run

emacs -nw

if you would like to decide at runtime whether you do want an X support or not.