Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

JensS

Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Tobias

ich habe eben noch das Beispiel mit MaryTTS und SSML in die Readme hinzugefügt.
https://github.com/tobiasfaust/MyFHEM/tree/master/FHEM
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

#1232
Zitat von: Tobias am 16 März 2024, 08:14:45@Ellert, es wäre super wenn du als Basis immer den aktuellen Stand aus dem Git nimmst
@Tobias:
Mache ich das nächste Mal, bin davon ausgegangen, dass Du noch nichts übernommen hast, weil es hier keine Rückmeldung gab zur Datei aus #1219.

Es gibt ein Reading 'endTime'  das keine weitere Funktion zu haben scheint, es wird immer auf 00:00:00 gesetzt.
Es wird nur in der Sub Text2Speech_BuildMplayerCmdString (Zeile 827) verwendet.
BlockingInformParent("Text2Speech_readingsSingleUpdateByName", [$hash->{NAME}, "endTime", "00:00:00"], 0);
Kann das entfernt werden ?





Ellert

Ich möchte hier kurz feststellen, dass ich meinen Teil ausgiebig getestet habe und kein unerwünschtes Verhalten festgestellt habe.
Ich nutze das Modul aus dem GitHub im Wirkbetrieb.

Aus meiner Sicht könnte das Modul ins FHEM-Repo.

Tobias

@ellert: Hab ich rausgenommen
Werde den Stand die nächsten Tage ins FHEM-Repo einchecken
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

@Tobias: Ich möchte Dich erinnern das Text2Speech Modul mit dem RemotePlayerCall einzuchecken.

Tobias

Hi,

Das hätte ich schon länger längst gemacht aber ich muss den fehlenden Abschlusstag noch finden. Vorher kann ich es nicht einchecken. Bin aber gerade im Urlaub. Steht noch auf meiner To-do Liste.
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

Hab's mir mal angesehen (letzte Fassung aus deinem contrib?), vermutlich ist in #1647 (ca.)
The Text2Speech devices provide a URL to the last generated mp3 file:<b>falsch, weil da eigentlich ein <br> am Ende stehen sollte?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Tobias

Hi,
ich konnte es nun einchecken. Bitte schaut mal ob es jetzt so passt
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


Elektrolurch

Hallo Tobias,

den ganzen thread hier habe ich jetzt nicht verfolgt... Ich benutze das Modul jetzt schon seit einigen Jahren, habe aber jetzt eine weitere Anwendung hinzugenommen: Eine wav - Datei an die Apple Homepod's für das Ansagen von Meldungen zu schicken. Dabei habe ich das Modul etwas gründlicher getestet und mir ist da etwas aufgefallen:
1.  Wenn das Attribut TTS_OutputFile  gesetzt ist, wird kein event mehr für das reading lastFilename  generieert.
2.  Ich nutze das Attribut TTS_SentenceAppendix.  Ich hätte erwartet, dass das File dann im Verzeichnis TTS_FileTemplateDir  gesucht wird, tatsächlich sucht das Modul aber im Verzeichnis TTS_CacheFileDir. Da ist die Doku auch nicht ganz stimmig. Leider kann man auch keinen vollständigen Pfad für das Attribut angeben.
3.  Wenn TTS_TimeOut  erreicht wird, weil z.B. die Internet - Verbinung nicht ok ist, wird der request ja mit der Funktion Text2Speech_AbortFn abgebrochen. Dann passiert es jedoch, das bei einem erneuten Aufruf des Moduls der neue Text an die alten Teile hinten angefügt wird.  Da gibt es intern ein array (Text2Speech?), in dem die übersetzten Texteile vermerkt werden. Bei Abbruch wird dieses array nicht gelöscht. Das müsste noch in die abortFN eingefügt werden.

Gruß


Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Habe da noch einen Fehler gefunden:
Nach einem Neustart ist das Attribut TTS_SentenceAppendix  verschwunden.
Das liegt daran, dass es nach einem Neustart nicht gesetzt werden kann, da u.U. die anderen Attribute, wie cache_dir oder template_dir ja noch nicht eingelesen wurden und somit die Existenz der appendix - Datei nicht korrekt geprüft werden kann.
Siehe Anfang der sub Text2Speech_attr:
 

sub Text2Speech_Attr(@) {
  my @a = @_;
  my $do = 0;
  my $hash = $defs{$a[1]};
  my $value = $a[3];

# nach einem Neustart noch gar nicht vorhanden!!!!!!
  my $TTS_FileTemplateDir = AttrVal($hash->{NAME}, "TTS_FileTemplateDir", "templates");
  my $TTS_CacheFileDir = AttrVal($hash->{NAME}, "TTS_CacheFileDir", "cache");
  my $TTS_FileMapping  = AttrVal($hash->{NAME}, "TTS_FileMapping", ""); # zb, silence:silence.mp3 ring:myringtone.mp3;
  my $TTS_AWS_HomeDir = AttrVal($hash->{NAME}, "TTS_AWS_HomeDir", "/home/fhem");


Gruß

Elektolurch
configDB und Windows befreite Zone!

cocojambo

Hallo Tobias,
ich muß mich auch mal bei dir melden.
Nachdem ich schon einen Thread aufgemacht hatte unter " Absturz von FHEM nach dem letzten Update und anschließender Eingabe von "rereadcfg" und es keinen Lösungsansatz gab, habe ich ich mich in "Kleinarbeit" vertieft und nach der Datei gesucht, die nach dem Update den Absturz verursacht.
Dabei bin ich dann auf Text2Speech gekommen. Wenn ich die Version 25785 verwende und dann " rereadcfg" eingebe funktioniert es einwandfrei. Nach dem Update in die neue Version funktioniert die Eingabe nicht mehr und FHEM stürzt ab. Ich habe vorläufig erst mal Text2Speech vom Update ausgeschlossen. Ich hoffe du kannst den Fehler nachvollziehen und im nächsten Release berücksichtigen. Wenn du noch irgendwelche Angaben von mir brauchst, melde dich.
Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Navigator

Hat jemand auch Probleme mit TTS und "Bookworm". Ich bekomme es nur über die Konsole zum laufen, FHEM bleibt stumm.

2025.03.06 20:35:58 4: MyTTS: ermittelte CodePage: ascii , konvertiere nach UTF-8
2025.03.06 20:35:58 4: MyTTS: MaxChar = 200, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2025.03.06 20:35:58 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2025.03.06 20:35:58 4: MyTTS: 0 => test
2025.03.06 20:35:58 4: MyTTS: Verwende TTS Spracheinstellung: Deutsch
2025.03.06 20:35:58 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
2025.03.06 20:35:58 4: MyTTS: Bearbeite jetzt den Text: test
2025.03.06 20:35:58 4: MyTTS: /mnt/sda2/log/cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3 gefunden, kein Download
2025.03.06 20:35:58 4: MyTTS: /mnt/sda2/log/cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3 hat eine Länge von 1 Sekunden.
2025.03.06 20:35:58 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:duration Val:1
2025.03.06 20:35:58 4: MyTTS:AUDIODEV=hw:2 /usr/bin/play -q -v $((12*110/10000)).$((12*110%10000)) /mnt/sda2/log/cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
ALSA lib confmisc.c:165:(snd_config_get_card) Cannot get card index for 2
Floating point exception
2025.03.06 20:35:59 4: MyTTS: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.

Aus der Fehlermeldung werde ich irgendwie nicht schlau. Hier noch ein Auszug der aplay -l

**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: sun4icodec [sun4i-codec], Gerät 0: CDC PCM Codec-0 [CDC PCM Codec-0]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 1: SPDIF [On-board SPDIF], Gerät 0: 1c21000.spdif-dit-hifi dit-hifi-0 [1c21000.spdif-dit-hifi dit-hifi-0]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 2: MicroII [Audio Advantage MicroII], Gerät 0: USB Audio [USB Audio]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0


Ich verwende einen USB Aktivlautsprecher

Internals:
   ALSADEVICE hw:2
   DEF        hw:2
   FUUID      5c72aad6-f33f-a3c8-0cf1-1d79c3ce26a88bfb
   MODE       DIRECT
   NAME       MyTTS
   NR         134
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     12
   eventCount 286
   READINGS:
     2025-03-06 20:35:58   duration        1
     2024-08-18 11:07:57   endTime         00:00:00
     2025-03-06 20:35:59   lastFilename    /mnt/sda2/log/cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
     2025-03-06 20:35:59   playing         0
     2025-03-06 20:35:50   volume          12
   helper:
     TTS_PlayerOptions
     Text2Speech:
Attributes:
   TTS_CacheFileDir /mnt/sda2/log/cache
   TTS_FileMapping einleitung:einleitung.mp3 alarm:alarm.mp3 beep_kurz:beep_kurz.mp3 beep_lang:beep_lang.mp3
   TTS_FileTemplateDir /mnt/sda2/log/cache/templates
   TTS_MplayerCall AUDIODEV={device} /usr/bin/play -q -v $(({volume}*{volumeadjust}/10000)).$(({volume}*{volumeadjust}%10000)) {file}
   TTS_UseMP3Wrap 0
   devStateIcon Initialized:general_ok
   group      CULS
   icon       audio_volume_high
   room       System
   verbose    5
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

Otto123

Zitat von: Navigator am 06 März 2025, 20:51:02ALSA lib confmisc.c:165:(snd_config_get_card) Cannot get card index for 2
Ich lese da: Du hast die Soundkarte falsch definiert.
Versuch mal hw:2,0 zumindest steht bei mir bei der Klinkenbuchse hw:0,0 wenn man sox play verwendet.
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