Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

netwalk

Hallo zusammen,

irgendwie stehe ich auf dem Schlauch.

Am WE habe ich die Sprachausgabe erfolgreich von Google auf Amazon Polly umgestellt.

Es dauerte mittels cpan Paws zwar einige Zeit, war aber nach korrektem Einstellen des AWS-Homedirs und Kopieren der credentials an passende Stelle sofort einsatzbereit und funktional.

Das Auswählen der Stimme funktioniert auch (Vicky, Marlene oder Hans).

Was mit nicht klar ist, auch nach umfangreicher Recherche hier im Forum und bei Amazon, wie aktiviere ich die neuralen Stimmen?
An welcher Stelle übermittle ich die gewünschte Engine? Oder ist diese Funktionalität nicht verfügbar?

Wäre schön, wenn mir jemand aufs Pferd helfen könnte...
live long and prosper
netwalk
_______________________________________________
INTEL NUC7CJYH, Homematic mit 3x HMLGW, JEELINK mit 18x TX29-DTH-IT, DUOFERNSTICK, FB7590 mit FBDECT, NETATMO, Philips HUE, RFXtrx433, Ubiquiti G3 PRO/FLEX/DOME/MICRO

Tobias

Ganz einfach, ist noch nicht implementiert.
Es müsste ein neuer Parameter eingeführt werden um ,,Standard" oder ,,neutral" einzustellen.

Ich nehme sehr gerne github patches entgegen ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

netwalk

Ah, ok, war ich wohl doch nicht blind.

Dann hoffe ich mal auf versierte Programmierer, die das implementieren können.
Der Unterschied zwischen den Standard- und den Neuralen-Stimmen ist schon enorm!
live long and prosper
netwalk
_______________________________________________
INTEL NUC7CJYH, Homematic mit 3x HMLGW, JEELINK mit 18x TX29-DTH-IT, DUOFERNSTICK, FB7590 mit FBDECT, NETATMO, Philips HUE, RFXtrx433, Ubiquiti G3 PRO/FLEX/DOME/MICRO

netwalk

Hmhh,

so schwer ist es wohl doch nicht.
Nach Lektüre der AWS-Dokumentation habe ich das Modul mit der "Engine" Zeile ergänzt, und es funktioniert:

    my $res = $polly->SynthesizeSpeech(
        VoiceId => $TTS_Language,
        Text => $text,
        TextType => $texttype,
        OutputFormat => 'mp3',
        Engine => 'neural',
    );

Die TTS_Language_Custom muss dann auf "Vicki" oder "Daniel" gestellt werden.
Nach Reload des Moduls funktionierte es auf Anhieb.

Jetzt wäre noch schön, wenn die Engine als Attribut einstellbar wäre, da bin ich aber raus... ;-)

live long and prosper
netwalk
_______________________________________________
INTEL NUC7CJYH, Homematic mit 3x HMLGW, JEELINK mit 18x TX29-DTH-IT, DUOFERNSTICK, FB7590 mit FBDECT, NETATMO, Philips HUE, RFXtrx433, Ubiquiti G3 PRO/FLEX/DOME/MICRO

Ellert

#1204
Ich nutze die Fully Kiosk Browser App auf meiner Infoanzeige, dort sollen auch die Textansagen abgespielt werden.
Die Fully API bietet die Möglichkeit Dateien abzuspielen, in dem man eine URL auf die Datei übergibt.

Daher wäre es schön, wenn Text2Speech diese URL bereitstellen könnte.
Zusätzlich wäre es hilfreich, wenn der Aufruf an den Remoteplayer unmittelbar nach der Fertigstellung der letzten Datei aufgerufen werden würde.

Diese Funktionalität habe ich in der anliegenden Datei eingebaut. Grundlage ist die aktuelle Moduldatei 98_Text2Speech.pm 25785 2022-03-06 10:00:56Z Tobias.Faust

Der Auruf des Remoteplayers wird in einem Attibut angegeben.

Ergänzte Befehlsrefenz:
TTS_RemotePlayerCall
Die Text2Speech Geräte stellen eine URL bereit, die auf die letzte erzeugte mp3 Datei zeigt:
http(s)://<fhem server ip>:<fhem port>/fhem/Text2Speech/<device name>/last.mp3Wenn dieses Attribut den Aufruf eines Remoteplayers enthält, wird er nach dem Erzeugen der letzten mp3 Datei ausgeführt.
Beispiel zum Abspielen einer Datei auf einem Smartphone oder Tablet mit Fully Kiosk Browser App.
attr <device name> TTS_RemotePlayerCall GetFileFromURL('http(s)://<remote player>:2323/?cmd=playSound&url=http(s)://<fhem server ip>:<fhem port>/fhem/Text2Speech/<device name>/last.mp3&loop=false&password=<password>')
@Tobias: Ich würde mich freuen, wenn die Ergänzung in das offizielle Modul einfließen würde.

Tobias

#1205
Interessant, kannst du einen pullrequest an mein repo stellen?

Edit: Probier mal bitte das fully FHEM Modul zu nutzen in Verbindung mit einem notify.

TTS generiert das mp3, wenn sich das Reading ändert reagiert dein notify drauf und aktiviert das fully Modul zum senden der URL.

Sollte funktionieren ohne das TTS Modul ändern zu müssen
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Ellert

#1206
FULLY war mir bisher nicht aufgefallen.

Der Workaround funktioniert, wenn man die Audiodatei unterhalb von /opt/fhem/www platziert.

Ist nicht die originäre Aufgabe von Text2Speech, Text in Sprache umzuwandeln und abzuspielen?

Mit meinen Vorschlag ist das für alle Abspielgeräte möglich, die eine Datei über URL erfordern und eine API zur Verfügung stellen.

Vorteile:
Über das Attribut TTS_RemotePlayerCall kann ein beliebiger Aufruf erfolgen.

Die URL für die letzte Datei ist fest.

Der Defaultchache muss nicht umgebogen werden.

Es sind keine zusätzlichen Module erforderlich.

Nachteil:
Ich habe keinen Account für Dein Repo und weiss nichts über die Bedienung.

Ich könnte aber eine Diff Datei zum aktuellen Modul erzeugen, wenn es hilft.

Beta-User

#1207
Da https://forum.fhem.de/index.php?msg=1227529 bzw. https://forum.fhem.de/index.php?topic=128346.msg1227537#msg1227537 auch schon länger offen sind, habe ich eben aus Anlass von Ellerts patch-Vorschlag einen PR eröffnet für meinen alten Code.

@Ellert: Habe mir deinen patch noch nicht angesehen, vermutlich ist da manches doppelt. Vielleicht bekommen wir das synchronisiert, dann liefere ich das auf dem (m.E. ziemlich umständlichen) github-PR-Weg nach...

Nachtrag: "die" (Zeile 1263) geht m.E. aber in einem FHEM-Modul gar nicht... Warum wird da nicht die FHEM-interne Lesefunktion aufgerufen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Ellert

#1208
@Beta-User
Hilf mir mal, welche Lesefunktion meinst Du?

FileRead liest zeilenweise, das geht mit mp3 nicht.

Ich habe genommen, was ich so im Netz gefunden habe.

Wenn es etwas besseres gibt, mach ich das gerne.

Beta-User

Zitat von: Ellert am 08 März 2024, 18:04:01FileRead liest zeilenweise, das geht mit mp3 nicht.
FileRead() war gemeint gewesen. Weiß nicht, ob das vergleichbar ist, aber MYSENSORS_DEVICE liest z.B. auch die firmwares als bin oder hex-Dateien ein und verarbeitet die dann weiter. Ist dann halt "eine Zeile".

Jedenfalls geht "die()" in einem FHEM-Modul gar nicht (bitte im Zweifel Rudi dazu kontaktieren), in gepackten Modulen würde ich Carp::carp verwenden (was aus dem Kopf "warn()" entsprechen sollte?).

Vielleicht kannst du auch mal meine Fassung austesten, die ist zwar von meiner Seite nur für Mimic 3 getestet, sollte aber auch mit MaryTTS klarkommen. Allerdings scheint das mit dem File-Einlesen nochmal was anderes (zusätzliches?) zu sein?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Ellert

#1210
@ Beta-User
Danke für den Hinweis, dass die zu sterben hat.

Die anliegend Datei ist die Aktuelle ohne die Verwendung von die.


Tobias

info: ich schau es mir gerade an und werd es dann übernehmen. Danke für das Upgrade.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

Zitat von: Beta-User am 08 März 2024, 11:51:53Da https://forum.fhem.de/index.php?msg=1227529 bzw. https://forum.fhem.de/index.php?topic=128346.msg1227537#msg1227537 auch schon länger offen sind, habe ich eben aus Anlass von Ellerts patch-Vorschlag einen PR eröffnet für meinen alten Code.

@Ellert: Habe mir deinen patch noch nicht angesehen, vermutlich ist da manches doppelt. Vielleicht bekommen wir das synchronisiert, dann liefere ich das auf dem (m.E. ziemlich umständlichen) github-PR-Weg nach...

Nachtrag: "die" (Zeile 1263) geht m.E. aber in einem FHEM-Modul gar nicht... Warum wird da nicht die FHEM-interne Lesefunktion aufgerufen?

Uii, diese patches habe ich überhaupt nicht gesehen...... schau ich mir an. Oder hast du schon alles fertig zusammen integriert?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Beta-User

#1213
Zitat von: Tobias am 09 März 2024, 07:00:00Uii, diese patches habe ich überhaupt nicht gesehen...... schau ich mir an. Oder hast du schon alles fertig zusammen integriert?
Ist nur ein patch, der zumindest in Teilen wohl dasselbe macht wie der Vorschlag von @Ellert (aber zumindest auf den ersten Blick eher in der Art wie die anderen Quellen eingebunden werden). Ist für Miminc3 (als MaryTTS-kompatible Lösung) von ein paar Usern getestet.

Daneben beinhaltet der patch auch ein upgrade der commandref auf "id"-Fassung, mit der man die Hilfetext-Auszüge direkt bei der Attributeingabe etc. sehen kann.

Kann nicht beurteilen, ob meine oder Ellerts Lösung besser ist (daher die Bitte an @Ellert, auch meine Fassung mal zu testen, auch weil bis dato afaik keiner MaryTTS selbst damit getestet hatte), die commandref sollte man m.E. bei der Gelegenheit dann in jedem Fall umstellen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Ellert

#1214
Zitat von: Beta-User am 09 März 2024, 08:35:22der zumindest in Teilen wohl dasselbe macht wie der Vorschlag von @Ellert


@Beta-User:
Soweit ich das sehe machen wir beide unterschiedliche Dinge.
Du bindest eine neue Engine ein und lieferst ein Audiofile, das Text2Speech weiter nutzt, sehe ich das richtig?. Und Du hast die Commandref aufgepept.

Ich stelle die letzte Audiodatei aus dem Reading lastFilename als Webhook zur Verfügung und biete die Möglichkeit Perlcode auszuführen. Zum Beispiel, um die URL zur letzten Audiodatei zum Abspielen an Fully zu senden.
Der Perlcode wird ausgeführt, nachdem die neue letzte Datei erzeugt wurde.

Zitat von: Beta-User am 08 März 2024, 18:15:44Vielleicht kannst du auch mal meine Fassung austesten, die ist zwar von meiner Seite nur für Mimic 3 getestet, sollte aber auch mit MaryTTS klarkommen.
Ehrlich gesagt, fehlt mir gerade die Zeit und wohl auch die Ressourcen, mein Testrechner ist ein Pi B+, da möchte ich keine TTS Engine rauf frickeln.

@Tobias:

Ich hoffe, es ist noch nicht zu spät für eine Attualisierung.
Ich habe noch ein
close $fheingebaut, im Falle eines Lesefehlers.