Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Tobias

Google Bugfix eingecheckt. Bitte testen.
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

Ab morgen über ein normales Update?
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)

Ellert

Google funktioniert wieder mit mehrmaligen kurz hintereinander liegenden Anfragen.

Und: SVOX-pico und das Attribut playing sind auch wieder enthalten.

SVOX-pico kennt "Deutsch" nicht mehr als Sprachkennzeichnung und kann nicht in den Cache schreiben, siehe Protokollauszug:
2015.10.29 12:00:57 4: VoiceRSS: Auflistung der Textbausteine nach Aufbereitung:
2015.10.29 12:00:57 4: VoiceRSS: 0 => Guten Morgen,;
2015.10.29 12:00:57 4: VoiceRSS: 1 => heute,;
2015.10.29 12:00:57 4: VoiceRSS: 2 => am neun
2015.10.29 12:00:57 4: VoiceRSS: 3 => undzwanzigsten zehnten 2015,;
2015.10.29 12:00:57 4: VoiceRSS: 4 => kurz das Wetter.,;
2015.10.29 12:00:57 4: VoiceRSS: 5 => Es ist teilweise wolkig,;
2015.10.29 12:00:57 4: VoiceRSS: 6 => mit Temperaturen zwischen 6
2015.10.29 12:00:57 4: VoiceRSS: 7 => und 13 Grad.,;
2015.10.29 12:00:57 4: VoiceRSS: 8 => Aktuell sind draußen 4komma5 Grad bei 99 Prozent Feuchte
2015.10.29 12:00:57 4: VoiceRSS: 9 => und 1015 millibar Luftdruck,;
2015.10.29 12:00:57 4: VoiceRSS: 10 => Tendenz steigend.,;
2015.10.29 12:00:57 4: Verwende TTS Spracheinstellung: Deutsch
2015.10.29 12:00:57 4: Text2Speech:pico2wave --lang=Deutsch --wave="cache/3b4fa8861de82fed0a417c487dc854fa.wav" "Guten Morgen,;"
Unknown language: Deutsch
Valid languages:
en-US
en-GB
de-DE
es-ES
fr-FR
it-IT

Usage: pico2wave <words>
  -w, --wave=filename     Write output to this WAV file
  -l, --lang=lang         Language (default: "en-US")

Help options:
  -?, --help              Show this help message
      --usage             Display brief usage message
2015.10.29 12:00:58 4: Text2Speech:lame "cache/3b4fa8861de82fed0a417c487dc854fa.wav" "cache/3b4fa8861de82fed0a417c487dc854fa.mp3"
Could not find "cache/3b4fa8861de82fed0a417c487dc854fa.wav".
2015.10.29 12:00:58 4: Verwende TTS Spracheinstellung: Deutsch
2015.10.29 12:00:58 4: Text2Speech:pico2wave --lang=Deutsch --wave="cache/f42a448e54b7f72431f5e8b0ee893ecb.wav" "heute,;"
Unknown language: Deutsch
Valid languages:
en-US
en-GB
de-DE
es-ES
fr-FR
it-IT

Usage: pico2wave <words>
  -w, --wave=filename     Write output to this WAV file
  -l, --lang=lang         Language (default: "en-US")

Help options:
  -?, --help              Show this help message
      --usage             Display brief usage message


Am 19.10. funktionierte SVOX-pico einwandfrei, mit der Datei von hier: http://forum.fhem.de/index.php/topic,18481.msg346776.html#msg346776

VoiceRSS geht auch noch.

ESpeak habe ich nicht installiert.

Tobias

Version von Berrnd,
Ist das jetzt die korrekte 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

Ellert

Zitat von: Tobias am 29 Oktober 2015, 13:20:33
Version von Berrnd,
Ist das jetzt die korrekte Version?

Ja, Google,VoiceRSS und SVOX-pico funktionieren.

slupus

Zitat von: Tobias am 29 Oktober 2015, 13:20:33
Version von Berrnd,
Ist das jetzt die korrekte Version?
Habe nur Google getestet (Cache vorher nochmals gelöscht) und es funktioniert wieder. Vielen Dank schon Mal fürs Einchecken!

Ellert

Zitat von: Hollo am 20 Oktober 2015, 13:15:13
Abwarten. Für kurze Zeit hat jede Änderung bei den meisten funktioniert.
Angeblich ist es völlig Wurscht, was hinter dem &client= steht (sowas ist ja auch schon seit Monaten drin); evtl. ist das &client=tw aber auch für Twitter und wird daher anders behandelt!?
Ich habe ein paar Strings ausprobiert, um diese Möglichkeit abzuklären:
Zitat von: Ellert am 20 Oktober 2015, 13:36:31
Könnte man dann nicht eine Zufallszeichenkette einbauen? Dann wäre jeder Aufruf individuell.

Ich habe statt "client=tw-ob", "client=abcde" probiert.
Das hat 18 mal funktioniert mit einem Text, der in 20 kurz hintereinander liegende Anfragen gesplittet wurde.
Beim 2. Mal kamen nur noch mp3-Dateien mit dem Google Hinweis zurück.

Dann habe ich "client=abcdx" probiert, es kamen nur mp3-Dateien mit dem Google Hinweis zurück.
Neue WAN-IP erzeugt. Dann kamen 19 richtige mp3-Dateien zurück und eine mit Google Hinweis.

Nach dem Wechsel auf "client=tw-ob" hat wieder alles funktioniert. Ohne Wechsel der WAN-IP.

Den Cache habe ich vor jedem Versuch gelöscht.

Schlussfolgerung: Ein beliebiger, zufälliger client-String funktioniert nicht dauerhaft, da nach etwa 18 kurz hintereinander liegenden Anfragen keine korrekten mp3-Dateien zurück gesendet werden.

Daher meine Frage, welche gültigen client-Strings gibt es noch?
Und gibt es eine Methode das heraus zu finden?

@boke: Wo hast Du den Hinweis auf "tw-ob" gefunden?

marvin78

Warum speichert DBLog seine Statistiken (die ich weder brauche noch möchte - es soll NICHTS aus dem Cache gelöscht werden) eigentlich in alle DbLog-Datenbanken (und dann auch noch in current, welches bei mir gar nicht verwendet werden soll)? Warum ist das nicht vernünftig dokumentiert?

Ellert

@marvin78: Mach einfach ein Kommentarzeichen "#" in der 98_Text2Speech.pm, vor die Zeile mit folgendem Inhalt:
  DbLog_Push($defs{$DbLogDev}, "Current", TimeNow(), $hash->{NAME} ."|". $file, $hash->{TYPE}, $text, "Usage", $NewValue, "");
also so:
#  DbLog_Push($defs{$DbLogDev}, "Current", TimeNow(), $hash->{NAME} ."|". $file, $hash->{TYPE}, $text, "Usage", $NewValue, "");
Dann speichern und neu laden.

Dann werden keine Statistiken in DBLog geschrieben.

Hier gibt es noch einige Infos, die Deine Fragen streifen könnten: http://forum.fhem.de/index.php/topic,18481.msg320044.html#msg320044


marvin78

#579
Danke für deinen (vergeblichen) Hilfsversuch. Wenn du meinen Beitrag aufmerksam gelesen hättest, wüsstest du, dass ich schon weiß, was da passiert. Und ich weiß auch wo es steht. Das Auskommentieren kann bei einem lebenden Modul aber nicht die Lösung für so etwas sein.

Hat man 3 DbLog Instanzen, wird auch in 3 DbLog Instanzen die Tabelle current mit Text2Speech Einträgen geflutet, hat man 10 Instanzen, werden 10 geflutet. Auch dann, wenn man die current Tabelle eigentlich gar nicht braucht. Dass das ganze im Ansatz durchaus seinen Sinn macht (für einige) und dass das alles nur eine Vorbereitung ist (ja auch das hatte ich schon gesehen), mag ja sein. Dann sollte so etwas aber konfigurierbar sein (Attribut und zwar mit opt in) und/oder besser durchdacht. In eine Produktivversion gehört so etwas aber nicht. Und schon gar nicht undokumentiert.

Ellert

@marvin78: Sieh Dir doch mal die Beiträge an, mit denen andere Modulnutzer, ihre Vorschläge ins Modul bekommen.




marvin78

#581
Suchst du Streit? Es geht hier nicht um Vorschläge für das Modul sondern um eine völlig verbuggte Funktion, die in der Form noch überhaupt keinen Sinn macht und nicht in eine Produktivversion eines Moduls gehört (und da wird mir jeder, der etwas Ahnung hat zustimmen). Ich muss keine anderen Beiträge lesen, um das zu merken und ich mache auch keinen Vorschlag für das Modul sondern ich melde einen Bug. Für mich kann es nur ein Versehen sein, dass so etwas überhaupt außerhalb einer Entwicklerversion Platz findet.

@Tobias (damit es mal den erreicht, den es tatsächlich angeht): Könntest du diese Sache mit dem Cache in der DB bitte entweder ausbauen oder per Attribut (opt-in) aktivierbar machen, bis es so funktioniert, wie es funktionieren soll?

Karlchen

Hallo bekomme bei jedem Aufruf von MyTTS diesen Fehler.

Terminal Type 'unknow' is not defined



Was könnte das sein

Mit freundlichen Grüßen

Tobias

aktuellen Stand jetzt endlich eingecheckt
@marvin78: ich bin nicht davon ausgegangen das jemand mehrere DBLog Instanzen aufbaut. Kannst du mir kurz einen fachlichen Hintergrund geben? Was ist der Vorteil?
Ich merke es mir vor dieses Verhalten per Attr zu deaktivieren.
Warum ist es drin aber die Löschroutine noch nicht implementiert?
1. Zeit
2. braucht man einen bestimten Fundus über eine längere Zeit um Löschkandidaten zu erkennen  und zu testen
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

marvin78

#584
Es gibt viele Gründe, das zu tun: Mein Grund ist, alltägliche Daten der meisten Devices, die ich nicht länger als eine Woche vorhalten möchte und muss, in einer kleinen DB und die Wetter-/Temperatur-/Stromverbrauchsdaten in einer anderen zu speichern. Erstere bekomme ich dann mit deleteOldDays klein gehalten, während die andere nicht angefasst wird und wächst (aber eben nur mit Daten, die man auch wirklich länger benötigen würde). Die Daten meiner Waschmaschine kommen in eine dritte, weil ich diese auch noch extern auswerte und die Übersicht somit höher ist. Hier im Forum gibt es viele User, die mehrere Instanzen verwenden (einigen davon habe ich es geraten ;)), weil sie Daten voneinander unabhängig ausdünnen  oder auswerten möchten. Auf meinem alten Cubietruck-Server brachte diese Vorgehensweise auch einen großen Performance Gewinn (Plotfork ist ja mit MySQL nicht wirklich verwendbar).

Dass du das nicht fertig eingebaut hast, ist völlig ok für mich. Eigentlich war es zuerst auch wirklich nur die Frage, warum diese undokumentierte Funktion gibt, die noch dazu nicht deaktivierbar ist. "Eskaliert" ist es erst durch die Einmischung anderer ;)