Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Ellert

#615
Das Reading "playing" hatte ich mal vorgeschlagen.
Ich möchte im "Master" FHEM natürlich sehen, welchen Zustand das TTS Device hat Das kannst Du nicht, weil der Slave seinen Zustand nicht zurückmeldet. Wenn readingsSingleUpdate so bleibt, wie es ist, dann wird playing auf 1 gesetzt, wenn der Master zum Slave schreibt, playing wird aber nicht zurück gesetzt. Das ist mir erst vor Kurzem aufgefallen. Der Schreibvorgang zum Slave dauert ja nur einen Bruchteil einer Sekunde. Hier könnte man alternativ auch nach Zeile 431 Zeile 431 Text2Speech_Write($hash, "tts " . join(" ", @a));
ZitatreadingsSingleUpdate($hash, "playing", "0", 1);
einfügen, dann würde playing auch zurückgesetzt.

Wenn man eine echte Rückmeldung vom Slave möchte, dass nicht mehr angesagt wird, dann müsste man das über FHEM2FHEM machen.

Änderung rot

Otto123

Zitat von: Lobot am 27 Januar 2016, 15:19:02
Die Zeile
fällt mir dabei auf, die erstellte MP3 hat wohl 0 Byte.
Ich würde mich freuen, wenn jemand einen Rat für mich hat.
Hallo Martin,

hast Du die aktuelle Version? Der Link den er im Log wirft geht nicht, dass sieht mir so aus, als ob Google Dich  nicht will (wird ein paar Seiten weiter vorne behandelt)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Lobot

Hallo Otto,

Danke für die Rückmeldung.

Das System ist auf dem neusten Stand. Hab eben zur Sicherheit noch mal ein Update gemacht. Immer noch der gleiche Fehler mit 0 Byte.

Leider gibt das Log für mich auch nicht mehr her, wo ich vielleicht ansetzen könnte.

Andere Vorschläge, woran es liegen könnte?

Gruß, Martin

Ellert

Hast Du aus dem cache alle Dateien mit 0 Byte gelöscht?

Otto123

Hallo Martin,

naja es liegt eigentlich immer daran, dass der Link der zum Google Translater gesendet wird, nicht das gewünschte Ergebnis zurückliefert und dann die Datei leer oder sehr kurz ist (weil sie nur Text und kein MP3 enthält).
Bei mir sieht der Link so aus http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Hallo%20Welt%21
Bei Dir so http://translate.google.com/translate_tts?tl=de&client=t&prev=input&q=Hallo%20Welt%21

Deine 98_Text2speech ist wirklich die?:
# $Id: 98_Text2Speech.pm 9758 2015-11-03 06:06:33Z tobiasfaust $

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Hast DU nach dem Update ein shutdown restart durchgeführt?

Lobot

Mist, es lag tatsächlich am shutdown restart.... Wie konnte ich das denn vergessen..!?  :o Sorry Leute, peinlich... ::)

Besten Dank für die Hilfe, läuft nun wie Butter :)

Gruß, Martin

marty29ak

Sorry vielleicht habe ich es übersehen, aber gibt es eine Möglichkeit das Modul zu nutzen wenn Fhem auf einem Windows7 Rechner läuft?
Gruß Martin

PsychoD

Text2speech funktioniert bei mir mittlerweile gut und meist zuverlässig, bis auf zwei Probleme:

- Ab und zu schmiert irgendwas ab, so dass eine Textausgabe ausfällt, bei der nächsten dann "Arrayblabla" vor der eigentlichen Ansage gesagt wird. Das könnte auch mit dem zweiten Problem zu tun haben
- Wenn ich nach einigen Tagen schaue per ssh in den TOP schaue, habe ich jede Menge mplayer-Zombieprozesse da liegen, die sich anscheinend alleine nicht mehr schließen.

Kennt jemand die Probleme oder hat eine Abhilfeidee?

Danke & Gruß

Ellert

ZitatAb und zu schmiert irgendwas ab, so dass eine Textausgabe ausfällt, bei der nächsten dann "Arrayblabla" vor der eigentlichen Ansage gesagt wird

Wenn die Ansage zu lang ist schlägt das Standarttimeout von 60s zu, das führt zu dieser Arrayansage.
Setz mal das Attribut TTS_TimeOut höher.

PsychoD

Zitat von: Ellert am 10 Februar 2016, 12:56:35
Wenn die Ansage zu lang ist schlägt das Standarttimeout von 60s zu, das führt zu dieser Arrayansage.
Setz mal das Attribut TTS_TimeOut höher.

Hi,

das hatte ich bereits versucht, ohne Linderung. Die Ansagen sind auch höchstens 5-10 Sekunden lang, ich glaube also nicht, dass ein Timeout zuschlägt.

VG

Carsten K.

Zitat von: Lobot am 28 Januar 2016, 12:53:12
Mist, es lag tatsächlich am shutdown restart.... Wie konnte ich das denn vergessen..!?  :o Sorry Leute, peinlich... ::)

Besten Dank für die Hilfe, läuft nun wie Butter :)

Gruß, Martin
Hi Martin,
wenn eine .pm-Datei geändert wurde (z.B. durch Update) sollte ein "reload [datei]" im Command-Feld ausreichen.
In diesem Fall: "reload 98_Text2speech.pm"

Gruß,
Obi
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Markus Hermann

Hallo zusammen!

Ich nutze das Modul 98_DLNAClient.pm (UPnP) von dominik um meine Peaq WLAN-Lautsprecher zu beschallen.
Ich kann damit auch einzelne MP3-Files streamen:

set MyPlayer stream http://192.168.2.2:8083/fhem/soundfiles/test.mp3


Nun würde ich gerne die Text2Speech-MP3's aus /opt/cache streamen, aber leider haben die ja keinen eindeutigen Namen.

Hat jemand eine Idee wie ich das lösen kann?

Gruß
Markus
CUL/CUL-RFR/HM-LAN an Cubietruck

FS20/FHT/TFK/UTS/KS300/HM-SEC-SC/HMS100/HM-OU-CFM-PL/HM-RC-SEC3/

FLOORPLAN auf Android-Tablet und VDR

Ellert

Die Dateinamen sind eindeutig, sie werden gebildet aus dem Ansagetext, der in einen MD5 Hash gewandelt wird, deshalb wird der gleiche Ansagetext nur einmal umgewandelt

ZitatHat jemand eine Idee wie ich das lösen kann?

Du könntest Dir die Beziehung Ansagetext zu Dateinamen speichern und zum Steamen darauf zugreifen.

PsychoD

#629
Zitat von: PsychoD am 10 Februar 2016, 11:17:31
Text2speech funktioniert bei mir mittlerweile gut und meist zuverlässig, bis auf zwei Probleme:

- Ab und zu schmiert irgendwas ab, so dass eine Textausgabe ausfällt, bei der nächsten dann "Arrayblabla" vor der eigentlichen Ansage gesagt wird. Das könnte auch mit dem zweiten Problem zu tun haben
- Wenn ich nach einigen Tagen schaue per ssh in den TOP schaue, habe ich jede Menge mplayer-Zombieprozesse da liegen, die sich anscheinend alleine nicht mehr schließen.

Kennt jemand die Probleme oder hat eine Abhilfeidee?

Danke & Gruß

Hi,

da mir das Problem echt auf den Nerv geht, habe ich es weiter analyisert. Meinen Bluetooth Speaker spreche ich über pulseaudio an. Pulseaudio scheint ziemlich verbuggt zu sein. Ich habe beobachtet, dass mplayer weiterspielt, obwohl das Audiofile zuende ist (sieht man mit verbose 5 und auch im "top"). Das passt zu einem Bugbericht hier: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=674145

FHEM bricht den Aufruf dann irgendwann ab, und interpretiert das als "BlockingCall". Der mplayer bleibt aber laufen, und das Problem ist, dass die laufende mplayer-ausgabe Folgeausgaben behindert, oder diese bescheuerte "arrayblabla" Folgemeldung verursacht (nach dem Blockingcall).

Die von Text2Speech ermittelte "Duration" ist aber richtig. Der einzige Workaround der mir einfällt ist daher die Duration auszulesen, und nach dieser Dauer einen system-call mit "sudo killall mplayer" abzufeuern.

Fällt jemandem dazu etwas besseres / eleganteres ein?

VG
Psy

Update:
Löse es nun erstmal so...
sub
say($) {
my ($text) = @_;
system( "sudo killall mplayer");
fhem("set speakerbot tts $text");
my ($duration) = ReadingsVal("speakerbot","duration", "30" );
$duration=$duration+5;
fhem("sleep $duration; {system('sudo killall mplayer')}");
}