Mbrola – etwas bessere Sprachsynthese

ESpeak kennt Ihr sicher alle. Diese Roboterstimme, die beim Desktop dabei ist, damit sehbehinderte Menschen einen Bildschirmleser haben können. Jetzt ist espeak aber nicht wirklich toll 🙂

Mbrola – etwas bessere Sprachsynthese

Mbrola wird in einigen Distors, wie bspw. Fedora, nicht ausgeliefert, da die Lizenzen und deren Verständnis dies nicht zu lassen. Wer das selbst austesten möchte, kann sich die nötigen Files hier runterziehen:

https://github.com/numediart/MBROLA

https://github.com/numediart/MBROLA-voices

Mbrola muß kurz kompiliert werden, aber das ist selbst für Anfänger leicht zu meistern, weil es kein kompliziertes Buildsystem gibt und man eigentlich nur den GCC Compiler und CMAKE auf dem Rechner installiert haben muß. Ich bin mir ganz sicher, daß Ihr das alleine schafft 🙂

Nicht? na ok: „cd MBROLA-master; make; cp Bin/mbrola /usr/local/sbin/“ das wars 😀

Die Stimmen kommen nach /usr/shar/mbrola/ , die muß man nicht extra kompilieren.

Um espeak kommt man leider nicht rum

Da mbrola keine Übersetzung von geschriebenem Text in Phonetische Abbildungen macht, muß man das espeak machen lassen. Damit Euch das nicht über den Kopf wächst, habe ich da mal was vorbereitet:

/usr/local/sbin/say:

#!/bin/bash

if [ „$VOICE“ == „“ ]; then
      VOICE=“de5″
fi

if [ ! -f „$1“ ]; then
      espeak -v mb-$VOICE -q –pho –phonout=/tmp/out.pho „$1“
else
      A=$(cat „$1“)
      espeak -v mb-$VOICE -q –pho –phonout=/tmp/out.pho „$A“
fi

mbrola -t 1.2 -f 0.8 /usr/share/mbrola/$VOICE/$VOICE /tmp/out.pho -.au | aplay 1>/dev/null 2>/dev/null
rm -f /tmp/out.pho

Die Datei noch mit chmod 755 aufrufbar machen und wir sind fertig.

Um die Anwendung zu vereinfachen kann man entweder eine Datei als Argument angeben oder den Text:

say „Ich bin ein Roboter.“

say Bunte-Schafe-von-Arthur-Miller.txt

Die Stimme ist auf die de5 Stimme voreingestellt, es geht aber auch jede andere Sprache:

env VOICE=de7 say text

Die Aussprache kann man noch stark verbessern. Beispiel: Das Wort „Zumutung“.Versucht mal diesen Satz:

say „Dies ist eine Zumutung“

und dann schreibt ihn mal so:

say „Diehs ihst eine Zumuhtung“

Ihr werdet den Unterschied heraushören können. Genauso ist es mit „gähnt“ und „gehnt“, weil das „ä“ überbetont wird. Es klingt wirklich besser es pauschal mit „e“ zu ersetzen. Wenn man sich dann erst einmal eine Datenbank mit „besseren“ Worten zusammen gesetzt hat, kann man das Script so erweitern, daß vor dem espeak aufruf, erst noch die Ersetzung passiert. Von einer SED Orgie kann ich aber nur abraten. Lasst dies besser ein spezialisiertes Programm wie „replace“ machen oder schreibt gleich ein eigenes kleines C Tool, daß sich eine Art Datenbank einliest.

Viel Spaß damit 😀

Swappy – ein Screenshot-Easy-Editing-Tool

Für das Pinephone habe ich neulich ein Tool ausprobiert, daß Screenshot gleich nach dem Aufnahmen nachbearbeiten soll: Swappy

Swappy – ein Screenshot-Easy-Editing-Tool

Ganz so einfach war es dann allerdings nicht, da es ..hmm.. irgendwie nicht zu ende gedacht wurde bei der Installation.
In der Desktopdatei „/usr/share/applications/swappy.desktop“ findet sich folgender Exec Eintrag:

[Desktop Entry]

Exec=swappy -f %F

d.b. beim Klick auf das Icon soll Swappy ein File über den Platzhalter %F übergeben werden. Das klappt natürlich nicht, weil wir nur das Starticon angeklickt haben und überhaupt nicht wissen, welches File da in Frage käme. Ergo kommt im Log dann gleich die Quittung: „parameter -f braucht ein Argument.“

Swappy ist also gar nicht für den Direktstart gedacht, daher müssen wir das in eine Befehlskette einbetten:

Wir legen uns einen Shell-Wrapper unter /usr/local/sbin/swappy-wrap mit folgendem Inhalt an:

#!/bin/bash

grim -g „$(slurp)“ – | swappy -f –

Mit einem chmod 755 machen wir die Datei dann noch ausführbar. Dann installieren wir noch grim und slurp nach: dnf -y install slurp grim

Das Desktopfile /usr/share/applications/swappy.desktop ändern wir jetzt noch passend ab:

[Desktop Entry]

#Exec=swappy -f %F
Exec=swappy-wrap

und schon bekommen wir nach dem Start von Swappy via Icon eine bewegliche AuUswahlbox auf dem Bildschirm bzw. können mit dem Finger einen Ausschnitt markieren, der dann von grim ausgelesen wird und an Swappy zur Bearbeitung weitergereicht wird.

Das sieht dann in etwa so aus:

Gedacht ist das um gleich nach dem Screenshot Anmerkungen in das Bild einzufügen, Pfeile hinzufügen, Bereiche zuverpixeln usw. z.b. um Bugreports zu vereinfachen. Leider gibt es da ein Problem: Man kann es nicht abspeichern 😀 Das Button dafür ist zwar da, aber es kommt leider kein Dateikontext, wenn man dort klickt 🙂

Das Besondere an Swappy ist, das es für Wayland gebaut ist, so funktionieren auch die hinzugefügten Tools nur unter Wayland. Auf einem Xorg Display kann man zwar den Editor von Swappy benutzen, aber einige andere Features bleiben auf der Strecke (das kleine Icon neben dem Speicherbutton).

Für mein Pinephone habe ich das jetzt erst einmal auf die Kandidatenliste gesetzt, weil das nützlich sein kann, wenn es richtig funktioniert. Der Bugreport ist raus, mal sehen was wird.

Systemd: Problem mit dem raid-check.timer

Nicht nur ich hatte Probleme den raid-check.timer zu finden, auch Systemd zeigt seit dem 1. März in Irland und Großbritannien Probleme bei Booten von Fedora 33+ . Ursache ist .. ta ter a ta .. die Zeitumstellung auf Sommerzeit 😀

Systemd: Problem mit dem raid-check.timer

… so sieht das Problem aus:

# cat /usr/lib/systemd/system/raid-check.timer
[Unit]
Description=Weekly RAID setup health check

[Timer]
OnCalendar=Sun *-*-* 01:00:00
Persistent=true
AccuracySec=24h

[Install]
WantedBy=timers.target

Ich habe einmal rot markiert wo da das Problem liegt. Es ist leider noch nicht so ganz raus, warum das erst seit dem 1.3. ein Problem ist, ich tippe auf einen kleine Vergesslichkeit im Code ein Datum zu entfernen, ab wann andere Routinen zum Einsatz kommen sollte. Es ist aber nur eine Vermutung.

Keine Vermutung ist, daß nur England und Irland betroffen sind. Aufgrund der kommenden Zeitumstellung wechselt die Zeitzone dort von GMT auf IST bzw. BST , Sommerzeit halt. Eine alte Regel von Cronos, dem Schutzpatron aller sich wiederholenden Aufgaben, besagt, daß man zwischen 0:59 und 2:01 keine Cronjobs einträgt. Bei einer Zeitumstellung fliegt es einem dann um die Ohren, weil Jobs zweimal ausgeführt werden.

Nicht lachen, ist erst letzten Herbst bei einem Kunden passiert 😀

Die Lösung

Als merkwürdige Konsequenz bootet Fedora 33+ nicht mehr sauber und man muß den Timer vom Start ausnehmen:

systemctl mask raid-check.timer

Das kann man bei noch gestartetem System machen, oder wenn man seinen Rechner über Grub in den „Nur-Root“ Modus bootet. Wer aber schon am Grubeintrag dran ist, der kann sich alternativ auch behelfen, in dem er einen Kernelparameter hinzufügt: „systemd.mask=raid-check.timer“.

Alle diese Lösung verhindern den Start der Einheit. Wer sowieso keinen Softwareraid im System hat, kann den Timer auch gleich beenden.