Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Navigator

so ein mist...so ein Klasse Modul, nur bei mir gehts wieder nicht. Das Verzeichnis ist da, Zugriffsrechte prüfe ich noch mal. Die Datei vom ersten erfolgreichen Versuch liegt noch drin. Mich wundert das die ganze Sache nur ein einziges Mal funktioniert. Ob das wirklich nur am gescheitertem Zugriff auf den Telnetport liegt?
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

Tobias

Teste mal mit unterschiedlichen Texten...

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

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

Navigator

So es klappt nun auch bei mir... der lokale Zugriff über Telnet war nicht möglich. Ich habe in der /hosts den Rechnernamen bei 127.0.0.1 entfernt und wieder localhost eingetragen. In der /hostname stand nach wie vor schon der richtige Rechnername. Telnet war als Paket auch noch nicht installiert, insoweit wohl irrelevant,  der Dienst hat trotzdem schon gelauscht.

Danke für das prima Modul, wieder was zum "rumspielen".  ;)
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

Navigator

Hier noch eine kleine Routine für die myUtils, damit beim Temperaturen vorlesen von Sensoren der Punkt gegen ein Komma getauscht wird und die Dame damit dann klar kommt.
Das war mein erstes selbst gebasteltes Script in Perl.  ::)
Ich weiss allerdings noch nicht wie sich das auf das Cacheverzeichnis auswirkt, der könnte sich damit schnell  ins unermessliche füllen. Zum Glück sind die Dateien jedoch recht klein.


########Temperatur ohne Punkt mit Komma für TTS#######
sub
TemperaturenTTS
{
my $Aussentempsensor=ReadingsVal("Aussentempsensor","temperature","");
my $Punktlos=$Aussentempsensor;
$Punktlos =~ s/\./,/;
fhem ("set MyTTS tts Temperatur ist $Punktlos;")
}
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

peterk_de

Ich habe schon seit längerem folgende Fehlermeldung beim Starten von FHEM in der Konsole:


Prototype after '@' for main::Text2Speech_SplitString : @$$$$ at ./FHEM/98_Text2Speech.pm line 422, <$fh> line 1596.


Schaden scheint das aber keinen zu verursachen - läuft soweit ich erkennen kann alles prima - ist das bekannt? LG!
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Tobias

@peterk, warscheinlich muss die Routine nur weiter nach hinten in das Modul geschoben werden....

Schön aber sonst nix weiter zu hören... heißt das das Modul überall fehlerfrei arbeitet :) Bei mir ist es so jedenfalls...
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

Rince

Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

#127
Weil es grade im Einsteigerforum ist:
Könntest du bitte noch zwei Sachen ändern:

Beim Einbinden einer MP3 muss Text vor und nach der MP3 kommen. Das ist nicht optimal. Ansonsten könnte man Stille vorher/nachher einfügen, oder auch ein Pling als Ankündigung einer Sprachausgabe.
Das wäre sehr hilfreich.



Und, zweite Frage (aber nicht so dringlich), das Mappen einer MP3 ist bei vielen MP3s umständlich. Ohne wäre es leichter. Einfach nur die MP3 in :: gesetzt z.B.
Dann wäre Text2Speech auch gleich gut geeignet zum MP3s abspielen. Ist bequemer als direkt den mplayer zu benutzen (non blocking...)
(Ich hätte gerne Fanfaren wenn ich mit dem Auto in den Hof fahre und das Haus betrete, möchte aber ungern im Regen stehen da fhem grade die Tür nicht öffnet, während die Fanfaren ertönen)

Dann könnte das Modul auch gleich als einfacher Audioplayer missbraucht werden.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

kud

#128
Hallo Tobias,
danke für Dein sehr interessantes Modul.
Könntest Du oder ein anderer mir bitte folgendes kurz erklären.
TTS_CacheFileDir
Optional: Die per Google geladenen Sprachbausteine werden in diesem Verzeichnis zur Wiedeverwendung abgelegt. Es findet zurZEit keine automatisierte Löschung statt.

Warum muss ich irgendetwas cachen oder schaut es jedesmal nach ob schon mal "Die Temperatur im Wohnzimmer beträgt 20 Grad" gesagt wurde?

TTS_FileMapping
Angabe von möglichen MP3-Dateien mit deren Templatedefinition. Getrennt duch Leerzeichen. Die Templatedefinitionen können in den per tts übergebenen Sprachbausteinen verwendet werden und müssen mit einem beginnenden und endenden Doppelpunkt angegeben werden. Die Dateien müssen im Verzeichnis TTS_FIleTemplateDir gespeichert sein.

Auch das verstehe ich nicht. Kann ich nicht einfach eine MP3 mit
set MyTTS tts Horch was kommt von draußen rein :/Soundfiles/hollahi.mp3:
abspielen?
Das Mapping würde uUmständen mehrere Zeilen lang werden wenn ich 50 MP3s einbinden will.

Ich habe sicherlich noch kein Verständnis für die Arbeitsweise des Moduls. Bitte erklärt mir das.

Danke KU

Uups. Danke Rince. Du warst schneller.

Tobias

#129
Zitat
TTS_CacheFileDir
Optional: Die per Google geladenen Sprachbausteine werden in diesem Verzeichnis zur Wiedeverwendung abgelegt. Es findet zurZEit keine automatisierte Löschung statt.

Warum muss ich irgendetwas cachen oder schaut es jedesmal nach ob schon mal "Die Temperatur im Wohnzimmer beträgt 20 Grad" gesagt wurde?
Ganz einfach, Ziel ist eine flüssiger Sprachwiedergabe die so schnell als möglich nach Absetzen des Befehls einsetzt.
Das geht nur mit Vor-Cachen und Nutzung von "mp3wrap" um Teilsätze zu einem Gesamt-MP3 zusamenfügen zu können.
Vor jeder(!) Ausgabe wird geschaut, ob schon jeder Teilsatz im Cache vorhanden ist. Falls ein Teilsatz fehlt, wird dieser heruntergeladen. Das merkt man an einer gefühlt langen Sprechpause. Sind alle Teilsätze im Cache vorhanden, läuft die Sprachausgabe ohne Internetzugriff, ohne Sprechpause und damit flüssig.
Teilsätze bedeutet, das der duch fhem-übergebene TTS-String versucht wird, in einzel-Sätze zu zerlegen. Das passiert am Satzende (Punkt), und bei zusammengesetzten Sätzen (Komma, "und"). Das ist notwendig, weil die Google TTS-Engine nur maximal 100Zeichen akzeptiert. Wünde man diese einzelnen MP3´s hinterher nicht wieder zusammensetzen (-> mp3wrap) würde der sprachfluss extrem stockend sein. Erklär das mal deiner Frau warum die Tante zwischen jedem Teilsatz 3-4 Gedenksekunden einlegt ;)

Zitat
TTS_FileMapping
Angabe von möglichen MP3-Dateien mit deren Templatedefinition. Getrennt duch Leerzeichen. Die Templatedefinitionen können in den per tts übergebenen Sprachbausteinen verwendet werden und müssen mit einem beginnenden und endenden Doppelpunkt angegeben werden. Die Dateien müssen im Verzeichnis TTS_FIleTemplateDir gespeichert sein.
Auch das verstehe ich nicht. Kann ich nicht einfach eine MP3 mit
set MyTTS tts Horch was kommt von draußen rein :/Soundfiles/hollahi.mp3:
abspielen?
Ist aufgenommen zur nächsten version.
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

kud

#130
Danke Tobias.
Ich wollte schon motzen wegen der (vormals) einsilbigen Erklärung.
Das würde bedeuten, wenn man Standardsätze geschickt aufsplittet das keine "Übersetzung" seitens Google mehr vorgenommen wird ?
Ich lass schon mal Teilsätze vorab mit
"set TTSwiedergabe tts Die Temperatur im"
"set TTSwiedergabe tts Wohnzimmer beträgt" "set TTSwiedergabe tts Kinderzimmer beträgt" etc.
"set TTSwiedergabe tts 18 Grad." "set TTSwiedergabe tts 19 Grad." etc.
im Cache ablegen.

In diesem Fall würde ein "set TTSwiedergabe tts Die Temperatur im, Wohnzimmer beträgt, 20 Grad."
keinen Googlezugriff benötigen ?

Sehe ich das Richtig?

Tobias

#131
Nein, nicht ganz... TTS kümmert sich selbständig um das Aufsplitten und cachen. Du musst nichts aktiv vorcachen. Außerdem bedeutet ein Komma auch immer eine Sprechpause....
Also einfach deinen TTS-Satz ins TTS-Modul werfen und gut iss...

Hier mal eine neue Version zum testen. Bitte um Rückmeldung ob soweit io. Dann checke ich sie ein.

- Man kann jetzt eine mp3-Datei direkt angeben, zusätzlich zu den vordefinierten Templates
- Man kann jetzt auch eine mp3 als alleiniges TTS übergeben

bei Angabe von mp3-Dateien müssen diese wie vorher unterhalb von TTS_CachefileDir/TTS_FileTemplateDir liegen. Default ist cache/templates
Wird eine angebene Datei nicht gefunden so spricht TTS den Dateipfad aus ;)

Beispiele:
set MyText2Speech tts :klingel.mp3:
set MyText2Speech tts :music/Hardcore-Vibes.mp3:
set MyText2Speech tts :tischglocke-einmal.mp3:Das ist meine Tischglocke.
set MyText2Speech tts :tischglocke-einmal.mp3:Erdgeschoss alles geschlossen.:tischglocke-einmal.mp3:Obergeschoss alles geschlossen.

Bitte beachten, bei Nutzung von MP3WRAP ist die flüssige Sprachausgabe erst ab der 2. Wiederholung spürbar. Ist auch klar, da der Cache erst aufgebaut werden muss. Also im Test immer alles 2x sagen ;) Fast wie im richtigen Leben ;)
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

Rince

Werde es heute Abend ausprobieren.

Vielen Dank schonmal!
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

Hi Tobias,

wo du gerade dabei bist:  ;) Mit meinen Passivlautsprechern ist es nach wie vor viel zu leise und ich patche mir nach jedem deiner Updates den Gain- Faktor wieder rein. Wenn du vielleicht auch meinst es könnte sinnvoll sein, könntest du es ggf. übernehmen? Im Anhang noch mal meine etwas ältere, gepatchte Version (Achtung: Das "set volume"- Kommando macht damit viel lauter, als in der Originalversion!!!)

Gruß und Dank

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Tobias

Hi. Reicht das originale Set volume nicht aus?? Auch nicht 200 oder 300%??

Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk

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