Neues Modul: Text2Speech

Begonnen von Tobias, 07 Januar 2014, 12:57:23

Vorheriges Thema - Nächstes Thema

ChrisD

Hallo,

Anbei befindet sich ein Patch der es den Squeezebox-Modulen erlaubt Text2Speech für die TTS-Ausgabe zu verwenden.

Grüße,

ChrisD

SGi

Hallo zusammen,

um noch mal die Frage nach der Stimme anzugehen:

Ich nutze derzeit sowohl TTS (Google) als auch den Homematic-MP3-Funkgong für verschiedene Ansagen. Für letzteres hatte ich mir vor einiger Zeit auch eine Stimme zugelegt, mir gefiel "Julia" von der acapela-group ziemlich gut, weil ich die Aussprache sehr natürlich finde. Leider ist natürlich der Umweg über das Erzeugen von festen MP3s für den Gong mit Hilfe einer separaten Applikation (TextAloud) ziemlich lästig und natürlich sehr unflexibel, weswegen ich danach irgendwann auch das TTS-Modul dazugenommen habe (z.B. für Ansagen von Anrufern).

Inziwschen hat sich auch noch ein SONOS-System dazugesellt, das derzeit auch per Google quatscht, mit den bekannten Problemen von gelegentlich nicht zur Verfügung stehenden Services etc.

Gibt es eine Möglichkeit, solche Offline-Stimmen wie von acapela (ich mag Julia immer noch am liebsten :) ) zentral zu verwenden, könnte ich für TTS (lokal am Raspi) und SONOS z.B. ein zentrale TTS-Engine konfigurieren ?  Wie geht es mit der Offline-TTS-Entwicklung weiter ?

Ich wäre auch ein großer Fan eines gut klingenden Offline-TTS-Systems und würde dafür auch Geld ausgeben...

Sven
FHEM auf RasPi und FritzBox 7390 mit MAX! und HomeMatic

PsychoD

Ich habe Text2Speech nun am laufen, scheitere aber daran es mittels Bluetooth ans laufen zu bekommen. Ich würde ja gern dem Ablauf im Wiki folgen, scheitere aber an dem folgenden Schritt:
osmc@osmc:~$ sudo apt-get install bluez bluez-alsa mplayer
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'mplayer2' instead of 'mplayer'
Package bluez-alsa is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'bluez-alsa' has no installation candidate


Mein FHEM läuft auf einem RPI2 mit OSMC, das wiederum auf Debian Jessie basiert. Ich vermute, dass ist das Problem - die Frage ist nun nur: Wie bekomme ich TExt2Speech auf die Bluetooth Box?

Danke & VG
psy

Ellert

ZitatThis may mean...available from another source
Greift osmc auf alle Paketquellen von Raspian Jessie zurück? Wenn nein, dann probier doch mal die Paketquellen hinzuzufügen.

PsychoD

Das ist eine gute Frage, wie kann ich das denn machen?

Ellert

Kennst Du Google? Versuch mal "raspbian paketquellen hinzufügen".

PsychoD

Zitat von: Ellert am 26 November 2015, 16:47:56
Kennst Du Google? Versuch mal "raspbian paketquellen hinzufügen".

Danke für den Tip! Aber kennst du Forum? Da helfen sich Menschen untereinander, wenn einer es besser weiß als der andere!  ;D ;D

Ich habe es mittlerweile hinbekommen, für alle die ein ähnliches Problem haben: Die entsprechenden ALSA Pakete scheint es nicht zu geben, sie sind einfach veraltet. Ist aber auch kein Problem, ich habe es mittels PulseAudio realisiert.

Nachdem ich an dem Versuch das Bluetoothgerät in ALSA reinzukriegen verzweifelt bin, habe ich zunächst dieses Paket installiert:
https://discourse.osmc.tv/t/testing-bluetooth-audio-streaming-a2dp/9116
Anschließend habe ich den Bluetooth-Speaker gekoppelt (über bluetoothctl) und konnte dann via PulseAudio auf dem Bt-Speaker abspielen (mplayer untertützt pulseaudio bereits standardmäßig):

define speakerbot Text2Speech pulse

Ich muss noch einen Weg finden, dass der BT-Speaker nach dem reboot automatisch verbunden wird, das ist nicht ganz so einfach, oder?

Verbleibend ist auch das Problem, das ab und zu ein BlockingCall entsteht, der dazu führt dass vor der nächsten Ansage zunächst "Array23213" oder so vorgelesen wird:

Im Log steht dann sowas:
2015.12.02 15:22:20 1: Timeout for Text2Speech_DoIt reached, terminated process 26476
2015.12.02 15:22:20 2: Text2Speech: BlockingCall for speakerbot was aborted


Meine Textansagen sind dabei nicht zu lang, alles ein Satz und maximal 6 Sekunden lang... Weiß jemand wie man der Sache auf denn Grund gehen kann?

Viele Grüße
Psy

Ellert

Ich selbst nutze kein BT, daher konnte ich nur Hilfe zur Selbsthilfe geben. Wenn ich gewusst hätte, das Debian Jessie kein bluez-alsa Paket enthält, hätte ich dies
ZitatGreift osmc auf alle Paketquellen von Raspian Jessie zurück? Wenn nein, dann probier doch mal die Paketquellen hinzuzufügen.
gar nicht erst geschrieben.

Da ich aber noch ein BT-Dongle herumliegen habe, habe ich auch mal ein bisschen gesucht und bin auf das hier gestoßen: http://www.instructables.com/id/Enhance-your-Raspberry-Pi-media-center-with-Blueto/?ALLSTEPS Da hört sich
ZitatStep 6: Fix for automatic audio after reboot
interresant an.

Text2Speech nutzt den BlockingCall bei jedem Aufruf des Mplayer. Wenn der ganze Prozess, nicht nur die Ansage, länger als 60 Sekunden dauert, wird der Blockierende Aufruf abgebrochen. Zum Untersuchen des Verhaltens kannst Du das Attribut "verbose" auf 5 setzen, dann bekommst Du ein sehr umfangreiches Log.

Du kannst ebenfalls das Attribut "TTS_TimeOut" auf einen anderen Wert setzen, um dem Prozess mehr Zeit zugeben.

PsychoD

Zitat von: Ellert am 02 Dezember 2015, 20:30:41
Ich selbst nutze kein BT, daher konnte ich nur Hilfe zur Selbsthilfe geben. Wenn ich gewusst hätte, das Debian Jessie kein bluez-alsa Paket enthält, hätte ich dies  gar nicht erst geschrieben.

Alles gut, bin ja Dankbar für jeden Rat!

Zitat von: Ellert am 02 Dezember 2015, 20:30:41
Da ich aber noch ein BT-Dongle herumliegen habe, habe ich auch mal ein bisschen gesucht und bin auf das hier gestoßen: http://www.instructables.com/id/Enhance-your-Raspberry-Pi-media-center-with-Blueto/?ALLSTEPS Da hört sich  interresant an.

Oh, das ist wirklich interessant, denn das war bisher kein Problem bei mir. Das Problem ist viel mehr, den Connect mit dem BT-Speaker nach dem Boot hinzubekommen.

Das will nicht so recht, so dass ich aktuell versuche mir mit einem Cronjob nach dem boot zu helfen, das in etwa so aussieht:

#!/bin/bash
sudo rfkill unblock all
{ echo connect "11:11:12:13:4A:25"; sleep 10; echo "info 11:11:12:13:4A:25"; echo "quit"; } | bluetoothctl


Ich brauche die Pause nach dem connect, da bluetoothctl einige Zeit braucht bis der connect zustandekommt, und diesen nicht vollendet wenn die bluetoothctl console voher beendet wird...

Das klappt aber auch noch nicht so recht, warum habe ich noch nicht rausgefunden.


Zitat von: Ellert am 02 Dezember 2015, 20:30:41
Text2Speech nutzt den BlockingCall bei jedem Aufruf des Mplayer. Wenn der ganze Prozess, nicht nur die Ansage, länger als 60 Sekunden dauert, wird der Blockierende Aufruf abgebrochen. Zum Untersuchen des Verhaltens kannst Du das Attribut "verbose" auf 5 setzen, dann bekommst Du ein sehr umfangreiches Log.

Du kannst ebenfalls das Attribut "TTS_TimeOut" auf einen anderen Wert setzen, um dem Prozess mehr Zeit zugeben.

Hmm, ich glaube eigentlich nicht, dass ich da mehr als 60 Sekunden brauche. Gibt es noch andere Gründe, warum der Blockingcall fehlschlagen kann? Ich hab verbose mal hochgesetzt, und dadurch gemerkt, dass sich anscheinend ein paar mplayer Zombieprozesse gesammelt haben. Im FHEM log stand dann sowas:

A:   1.1 (01.1) of 1.2 (01.1) 1718.7%                                           
A:   0.6 (00.5) of 0.7 (00.6) 3014.8%                                           
A:   1.1 (01.1) of 1.2 (01.1) 1718.8%                                           
A:   0.6 (00.5) of 0.7 (00.6) 3014.8%                                           
A:   1.1 (01.1) of 1.2 (01.1) 1718.8%                                           
A:   0.6 (00.5) of 0.7 (00.6) 3014.9%                                           
A:   0.6 (00.5) of 0.7 (00.6) 3014.9%                                           
A:   1.1 (01.1) of 1.2 (01.1) 1718.8%                                           
A:   1.1 (01.1) of 1.2 (01.1) 1718.8%                                           
A:   0.6 (00.5) of 0.7 (00.6) 3014.9%       


Was bedeuten die %-Werte?

Viele Grüße & Danke
Psy

Ellert

ZitatWas bedeuten die %-Werte?
Da kann ich leider nicht weiter helfen.

JoJota

#595
Hallo,
erst einmal danke für das Modul. Läuft über Klinke am Raspi ohne Probleme. Versuche jetzt aber auch meinen Bluetooth Stick zu koppeln. Die Anleitung im Wiki war leider nicht ganz so erfolgreich, scheint etwas veraltet zu sein (/etc/init.d/alsasound restart funktioniert nicht, nehme an, das muss alsa-utils heißen und der Google Translate Link funktioniert auch nur noch mit API Key).

Bin jetzt dieser Anleitung gefolgt http://www.nikolaus-lueneburg.de/2015/08/raspberry-pi-mit-bluetooth-lautsprecher/ und eine Ausgabe funktioniert über diesen Befehl ohne Probleme:

mplayer -ao alsa:device=bluetooth http://1live-diggi.akacast.akamaistream.net/7/965/119435/v1/gnl.akacast.akamaistream.net/1live-diggi

Daraufhin im TTS Modul unter DEF "bluetooth" eingetragen, Neustart des RPi, und siehe da es geht, naja, zumindest einigermaßen. Text wird am Ende immer abgeschnitten, was ja aber auch schon hier angesprochen wurde.

Edit: Konnte das Problem jetzt mit einer stillen MP3 unter FileMapping beheben.

Navigator

#596
Gibts es eigentlich inzwischen eine Endlösung für die Problematik Google Captcha? Hin und wieder werde ich noch geblockt, habe aber auch länger kein Update des Moduls gemacht. Woher weiss dieses überhaupt, was schon im Cache ist? Gibt's da einen Index dafür?
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

marty29ak

Hallo,
da ich im Tread für das Alarmanlagen Modul leider keine Antwort zu meiner Frage bekommen habe, versuche ich es mal hier:

Ich nutze zum ausgeben vom Status der Alarmanlage  Text2Speech und hatte mir gedacht auch den Alarm an sich damit aus zu geben. Dazu habe ich eine lange mp3 mit Sirenen Klang erstellt und lasse die bei Alarm abspielen.
Nur wie kann ich beim Alarm widerrufen die Ausgabe der Mp3 abbrechen? Hab im Wiki dazu keinen Befehl gefunden. Evtl. geht es auch mit einem Befehl für den Mplayer. Habe aber auch hier kein Kommando über die suche finden können, obwohl dieser ja eigentlich laut Beschreibung komplett über die Kommandozeile bedient wird!?!
Ach ja in dem Zusammenhang, gibt es auch einen Befehl eine Sprachausgabe solange zu wiederholen bis mit einem weiteren Befehl diese Schleife abgebrochen wird?

Wäre schön wenn mir Jemand helfen könnte, da ich sonst extra eine zusätzliche Sirene anschaffen müsste.
Gruß Martin

Ellert

ZitatAch ja in dem Zusammenhang, gibt es auch einen Befehl eine Sprachausgabe solange zu wiederholen bis mit einem weiteren Befehl diese Schleife abgebrochen wird?
Das kannst Du mit einem DOIF lösen. http://fhem.de/commandref_DE.html#DOIF_repeatcmd

ZitatNur wie kann ich beim Alarm widerrufen die Ausgabe der Mp3 abbrechen? Hab im Wiki dazu keinen Befehl gefunden.
Text2Speech stellt m.W. keinen Befehl zur Verfügung, um die Ausgabe explizit abzubrechen.

Nimm doch eine kurze mp3-Datei und wiederhole die Ausgabe, s.o.

Vielleicht klappt es, eine kurze Ansage hinterher zu schieben, um das Vorhergehende abzubrechen.

Aber: Text2Speech ist , wie der Name schon sagt, in erster Linie ein Modul um Sprache in Text umzuwandeln und auszugeben.

Du könntest den Mplayer auch als Systemaufruf starten und dann den Thread selbst beenden.

ZitatEvtl. geht es auch mit einem Befehl für den Mplayer. Habe aber auch hier kein Kommando über die suche finden können, obwohl dieser ja eigentlich laut Beschreibung komplett über die Kommandozeile bedient wird!?!
Mit der Kommandozeile ist die Betriebssystemkonsole gemeint.
https://wiki.ubuntuusers.de/MPlayer

Hollo

Zitat von: Dittel am 17 Dezember 2015, 14:08:52
Gibts es eigentlich inzwischen eine Endlösung für die Problematik Google Captcha? Hin und wieder werde ich noch geblockt, habe aber auch länger kein Update des Moduls gemacht. Woher weiss dieses überhaupt, was schon im Cache ist? Gibt's da einen Index dafür?
Mit dem aktuellsten Stand funktioniert Google eigentlich wieder zuverlässig.
Für wie lange ist schwer zu sagen, aber es läuft.  :D
Außerdem wurde eine weitere TTS-Ressource eingebaut; also mach mal wieder ein Update.

Das mit dem Cache ist relativ einfach... das Modul "berechnet" einen Namen für die Textdatei, und guckt dann nach, ob diese Datei schon vorhanden ist.   :)
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"