Piper TTS braucht Eure technische Expertise

Beim letzten Linux am Dienstag wurde uns Piper TTS vorgestellt, daß in seiner initialen Version schon gute Resultate liefert, aber leider min. einen gravierenden Sprachfehler in den deutschen Modulen hat. Carola konnte natürlich nicht anders und hat die Sprachausgabe schon für sich gekappert 😉

Piper TTS braucht Eure technische Expertise

Laut dem GitHub Issue #52 ist dafür aber ESpeak-NG verantwortlich, weil es min. die Silbe „ch“ nicht richtig ausspricht. So klingen die deutschen Stimmen wie unsere holländischen Nachbarn. Eine provisorische Korrektur später, hatten wir allerdings Turkdeutsch in der Ausgabe, was auf seine Art auch irritierend ist, aber immer noch verständlicher, als wenn CH als ICK ausgesprochen wird 😉

Jetzt kommen die ESPEAK-NG Fachleute unter Euch ins Spiel: Wie bekommt man den Sprachfehler da jetzt raus?

Wenn jemand hilfreiche Tips hat, dann bitte direkt in dem GitHub Issue #52 zum Besten geben, um so schneller kann Piper die Standartsprachausgabe von Linux werden, auch wenn die noch einen weiten Weg hat.

Der Vorteil von Piper ist die komplett lokale Verarbeitung. Es ist zudem auch super schnell, variabel und kann in mehreren Sprachen benutzt werden. Leider fehlt dem TTS System noch jede Form von Betonung durch Satzzeichen, etwas, daß andere TTS wie das von Google oder Mary schon lange beherrschen.

Carola Integration

Das neueste Carola Paket v1.19 hat bereits die nötigen Konfigurationen und den Sprachbefehl mitbekommen. Außerdem könnt Ihr die Piper-RPMs auch im PVA Repo finden. Wer das selbst von Hand nutzen will, kann sich die Files von Github ziehen.

Wenn man eine „nicht-repo“ Version von Carola pimpen will, müßte man die Github-Dateien nach /usr/local/share so installieren:

piper
├── espeak-ng-data
├── libespeak-ng.so -> libespeak-ng.so.1.1.51
├── libespeak-ng.so.1 -> libespeak-ng.so.1.1.51
├── libespeak-ng.so.1.1.51
├── libonnxruntime.so.1.14.1
└── piper
piper-voices
├── voice-de-eva_k-x-low
├── voice-de-karlsson-low
├── voice-de-kerstin-low
├── voice-de-pavoque-low
├── voice-de-ramona-low
└── voice-de-thorsten-low

und dann das piper-say Script (im PVA Github Repo) benutzten: /usr/local/sbin/piper 

#!/bin/bash

NAME=$(mktemp)
TEMPO=0.95

if [ "$VOICE" == "" -o "$VOICE" == "de" ]; then
#VOICE="de-thorsten-low"
#VOICE="de-eva_k-x-low"
#VOICE="de-karlsson-low"
VOICE="de-kerstin-low"
#VOICE="de-pavoque-low"
#VOICE="de-ramona-low"
fi

TEXT="$1"

if [ "$NAME" != "" ]; then

   TEXT=$(echo "$TEXT" | sed -e "s/ch/sch/g" -e "s/ssch/sch/g" | tr -d "\n" )
   echo "$TEXT" | /usr/local/share/piper/piper -m /usr/local/share/piper-voices/voice-$VOICE/$VOICE.onnx -f $NAME 2>/dev/null
   play $NAME tempo $TEMPO 2>/dev/null
   rm -f $NAME
fi

Die kleine Kompensation:

TEXT=$(echo „$TEXT“ | sed -e „s/ch/sch/g“ -e „s/ssch/sch/g“ | tr -d „\n“ )

ist leider nötig, weil wir ja nicht dauernd ICK hören wollen und weil Piper ein entscheidenden Bug hat:

Wenn es auf ein LF im Text trifft, fängt es hinter dem letzten LF erst an zu arbeiten. Ihr könnt Euch vorstellen, was passiert, wenn man Ende vom Text ein „LF“ steht? Genau ..“kritsch“ und das wars 😀

Quelle: https://github.com/rhasspy/piper

Wie komme ich ans Repo dran?

PVA: Carola hat Ihr eigenes Repo bekommen

 

Remote Desktop: Gnome-Remote-Desktop ersetzen

Der Ursprung dieser Artikelserie war der Versuch, per Remote-Desktop auf mein TerraPad zuzugreifen, so daß ich in die laufende Desktopsession eingreifen kann. Da es sich um ein Touchgerät handelt läuft der Gnome Desktop und der bietet dafür genau die richtige Funktion, direkt integriert, per Einstellungen aktivierbar, super komfortabel aber leider völlig disfunktional und somit komplett unbrauchbar 🙁

Remote Desktop: Gnome-Remote-Desktop ersetzen

Falls Ihr den auch ausprobiert habt und es nicht ging, gibt es dafür zwei mögliche Gründe: Entweder Ihr habt eine Auto-Login-Desktopsession, da es da keine Logindaten gibt, kann man die im Remotezugriff nicht abfragen laut Fedora Gnome Maintainer, oder Ihr bekommt trotz richtiger Logindaten keine Authentifizierung hin, dann habt Ihr das gleiche Problem wie ich.

Netter Versuch Gnome, aber…

Das geht alles viel besser als mit Eurer Bastellösung die irgendeine FreeRDP Liblösung benutzt, die leider nicht richtig funktioniert. Ironischerweise kann der Shadow-CLI Server von FreeRDP die ganze Sache sofort richtig, man muß ihn halt nur starten 🙂 Dabei löst er nämlich gleich beide Probleme, denn er macht den Auth gegen die Passwd und nicht in irgendeiner komischen Gnomeenklave.

Damit ist es dann auch egal, ob man einen Autologin hatte oder nicht. Als Sicherheitsmaßnahme kann man nur als der laufende User einloggen, also der, dem der Desktop gehört. Alles andere wäre auch unschön unsicher.

Und so geht es

wir brauchen:

sudo dnf install freerdp-server

und dann bauen wir uns einen kleinen Systemd.Service und können das starten. Dazu legen die Datei an ~/.config/systemd/user/shadow-remote-desktop.service :

[Unit]
Description=Shadow RDP Service
DefaultDependencies=no

[Service]
ExecStart=/usr/bin/freerdp-shadow-cli +auth
Restart=always
WorkingDirectory=%h
Environment=DISPLAY=:0
Type=simple
TimeoutStartSec=10

[Install]
WantedBy=default.target

dann müssen wir Gnome aufhalten, so Ihr denn Gnome einsetzt. Bei Cinnamon oder anderen Desktops ohne integrierte Lösung brauch Ihr das natürlich nicht machen 😉

systemctl –user stop gnome-remote-desktop.service
systemctl –user disable gnome-remote-desktop.service
systemctl –user mask gnome-remote-desktop.service

jetzt noch starten:

systemctl –user start shadow-remote-desktop.service

und das war es. Fertig. Keine dummen Fehlermeldungen mehr, läuft direkt mit Remmina und XFreeRDP als Klienten, einfach perfekt.

Ihr könnt den Dienst übrigens auch allen Usern auf dem System einrichten, dann braucht Ihr im Service Abschnitt noch den Eintrag: „User=%i“ und die Servicedatei muß systemweit installiert sein, z.B. hier /usr/lib/systemd/user/ .

Kleine Erklärung zur Datei und was Ihr ggf. ändern müßt

+auth“ damit wird die Authentifizierung erzwungen. Ohne die Anweisung könnte jeder in den Desktop rein, daß wollt Ihr nicht mal zu hause im LAN haben.

DISPLAY=:0“ ist das Defaultdisplay Eures Desktops. BEI MIR ist das aber :1 , keine Ahnung wieso. Wenn es also bei Euch nicht auf Anhieb startet, dann schaut doch mal ins Terminal rein, ob Eure DISPLAY Variable auch wirklich :0 ist. Einfach „echo $DISPLAY“ eingehen, dann wisst Ihr es.

Falls Ihr Wayland benutzt

Kann ich Euch leider nicht garantieren, daß es geht. Das müßt Ihr ausprobieren.

Einführung:

Remote Desktop: Einführung

Teil 1:

Remote Desktop: eigene Desktopsession mit XRDP

PVA: Cluster & Netflix & Streaming zusammen

Ich habe da mal ein Video für euch, aber nicht weiter erzählen 😉

PVA: Cluster & Netflix & Streaming zusammen

Kleine Demo, was man mit PVA so alles machen kann:

Wir haben hier jetzt das Netflixplugin, das Clusterplugin und das Streamingplugin kombiniert.

Die Geräte waren alle in einer Videokonferenz versammelt, damit man das Ergebnis sehen konnte. Die „Küche“ war ein Intel ATOM Tablet, das Wohnzimmer ein alter Laptop. Die Latzenzen bis man etwas sieht, sind jetzt nicht dem Netzwerk geschuldet, sondern dem Umstand, daß wir Livestreaming über FFMPEG machen, wozu FFMPEG erstmal ein paar Sekunden braucht. Es sind aber natürlich andere Wege denkbar: Temporäre Filezugriffe von den Geräten auf einen Share, Netzwerkpipelines usw. da geht noch was 😉

PVA: Clusterplugin für Carola

Netflix Plugin für Carola

Was ich Euch damit aber zeigen möchte ist, daß die Technik da ist. Baut Euch daraus die Wohnungs-KI, die ihr schon immer haben wolltet. KI? War da jetzt KI im Spiel? Nein, natürlich nicht, aber .. da wäre noch was …

KI, or not KI?

JETZT haben Ihr eine KI im Spiel 😀

Ihr merkt, daß ChatGPT hier im Freetalkmodus lief, weshalb alle Anfragen an Carola zu einem „Fehler“ geführt haben. Betreibt man das im Lückenfüllermodus, reagiert es nur auf den PVA Namen. Die Fehler in der Spracherkennung nerven, sind aber im Bereich des vertretbaren. ChatGPT holt da einiges richtig raus.

PVA: Carola trifft auf ChatGPT 4