Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Otto123

Hi,

nö sieht bei mir genauso aus:2017.01.13 14:11:29 4: Text2Speech:/usr/bin/mplayer -ao alsa:device=hw=0.0  -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 30 cache/15f3ee2c2bd4e05acae32c787e103a17.mp3
Cannot find HOME directory.


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

Nemo0815

OMG ich habs, war schon komisch dass im Log immer die manpage vom Mplayer auftaucht, so als ob man keine oder zuwenige Parameter angibt.

Wenn man genau hinschaut sieht man dass nach  dem -ao device ein Zeilenumbruch ist (!!!), d.h. es wurde zwar etwas im Log angezeigt, aber der mplayer call bekommt nur die Daten bis zum Zeilenumbruch und spuckt dann die Hilfe aus  :o

Hab mal im fhem.cfg geschaut und siehe da,

define TTS_Wohnzimmer Text2Speech hw=2.0\

attr TTS_Wohnzimmer TTS_Language Deutsch
attr TTS_Wohnzimmer TTS_Ressource Google
attr TTS_Wohnzimmer TTS_UseMP3Wrap 1
attr TTS_Wohnzimmer verbose 5


Den "\" nach hw=2.0 entfernt und schon funktionierts! Keine Ahnung wie der dahin gekommen ist  :-X

2017.01.13 14:42:59 1: PERL WARNING: Use of uninitialized value $mp3Duration in string at ./FHEM/98_Text2Speech.pm line 641.
2017.01.13 14:43:33 4: TTS_Wohnzimmer: Auflistung der Textbausteine nach Aufbereitung:
2017.01.13 14:43:33 4: TTS_Wohnzimmer: 0 => ARRAY(0x23ea178)
2017.01.13 14:43:33 4: TTS_Wohnzimmer: 1 => Hallo Test


Otto123

Stimmt jetzt wo Du es sagst, mir war in Deinem list aufgefallen, dass die ersten Zeilen komisch aussahen. Normal sieht es so aus:
Internals:
   ALSADEVICE hw=0.0
   DEF        hw=0.0
   MODE       DIRECT
   NAME       MyTTS
   NR         25
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     30
   Readings:
     2017-01-13 16:01:43   duration        2
     2017-01-13 16:01:43   endTime         00:00:00
     2017-01-13 16:01:47   playing         0
     2017-01-13 16:01:41   volume          30
   Helper:
     Text2Speech:
Attributes:
   TTS_MplayerCall /usr/bin/mplayer
   TTS_UseMP3Wrap 1
   verbose    5


Na prima 8)
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

Tobias

Hi,
ich möchte hier eine neue Testversion mal reinstellen.
Folgende Neuerungen:

  • Attribut: TTS_speakAsFastAsPossible
    mit dieser Angabe verhält sich TTS so wie vorher. Lässt man das Attr weg, werden zuerst alle Sprachbausteine heruntergeladen und dann flüssig an einem Stück abgespielt (Wenn das Attribute TTS_UseMp3Wrap gesetzt ist) Ohne MP3Wrap macht dieses Attr keinen Sinn.
    Für Manche Anwendungen ist es eben sinnvoll ein paar sekunden zu warten und lieber einen flüssigen Sprachfluss zu haben anstatt schnell den ersten Textbaustein rauszuhauen und dann einen stockenden Sprachfluss zu haben.
  • neuer Modus: Server -> define <tts> text2speech none
    Hiermit findet keine Sprachausgabe statt. Es werden ausschließlich die Dateien heruntergeladen und bei TTS_UseMP3Wrap Nutzung zusammengesetzt. Die nun zu nutzende Datei ist im Reading lastFilename zu finden.
    In anderen Modulen die TTS anbieten wollen kann man nun ein "set <tts> tts <meintext>" absetzen und mittels Modulnotify Funktion auf das Reading reagieren

Doku im Modul ist ergänzt.
Bitte mal testen, dann checke ich es ein....
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

Wzut

Donnerwetter, das ging ja schnell :) Big THX, da werden dir mit Sicherheit ein paar SIP User um den Hals fallen  8)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Tobias

Zitat von: Wzut am 03 März 2017, 13:06:47
Donnerwetter, das ging ja schnell :) Big THX, da werden dir mit Sicherheit ein paar SIP User um den Hals fallen  8)
Hat bei mir auch ziemlich viel Kopfzerbrechen verursacht und ein paar Tassen Kaffee gekostet... Hoffe es klappt auf Anhieb...
Eine direkte Funktion mit Rückgabewert des Filenamens kann ich nicht anbieten da es NonBlocking läuft
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

Wzut

#726
Ich habe das jetzt so im SIP Modul eingebunden :
1. ich überschreibe lastFilename mit ---
2. rufe tts mit Text auf
3. warte das lastFilename einen Wert ungleich --- hat (Abbruch nach vom User definierter Zeit)
4. wandle mit sox das mp3 File in ein raw audio
5. starte den Anruf und spiele das File ab.

Absolut perfekt ! Ich bin auch von der Sprachqualität selbst nach dem Umwandeln in raw 8000 total begeistert  8)

Edit :
Zitatund mittels Modulnotify Funktion auf das Reading reagieren
das wird der nächste Schritt :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

kaihs

Hallo,

auch ich kann die neue Funktion für mein DFPlayerMini Modul sehr gut gebrauchen.
Es funktioniert auch wie gewünscht, inkl. Weiterverarbeitung in meiner Notify Funktion.

Danke.
Banana Pi, Add-On Board mit 1.8" TFT LCD und IR-Sender, CULFW V1.61, div. Homematic Komponenten, Pollin Funksteckdosen, Selbstbau CUL433 MHz, Jeelink Clone, EC3000
Selbstbau CUL868MHz für Wireless M-Bus, SIGNALduino mit Logilink Temp.-sensoren und Auriol Wetterstation

Tobias

hmm, da dann wage ich mal den Repo-Sprung....
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

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

chunter1

#730
Also bei mir kommt seit heute eine Mickey Mouse Stimme aus dem Lautsprecher.
Tritt allerdings nur auf, wenn vor dem Text eine mp3 Datei mit abgespielt wird.

Also z.B. bei set MyTTS tts :sounds/s0.mp3:Bla bla.

Was hilft ist TTS_UseMP3Wrap auf 0 zu setzen - dann ist die Geschwindigkeit wieder normal.




Tobias

setz mal bitte das Attribut TTS_speakAsFastAsPossible auf 1, dann verhält sich wieder alles wie vorher. Hilft das??

An der internen VErarbeitung habe ich nämlich nix geändert...
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

chunter1

Zitat von: Tobias am 09 März 2017, 09:32:01
setz mal bitte das Attribut TTS_speakAsFastAsPossible auf 1, dann verhält sich wieder alles wie vorher. Hilft das??

An der internen VErarbeitung habe ich nämlich nix geändert...

Danke, werds am Abend ausprobieren.
Was ist denn dann das geringere Übel?
TTS_speakAsFastAsPossible auf 1 setzen oder MP3wrap auf 0 setzen?

Tobias

probier bitte erstemal das Attribut TTS_speakAsFastAsPossible

Das mit der Mickeymausstimme kann ich hier leider nicht nachvollziehen, es scheint nur sporatisch bei einigen Usern aufzutreten. Hier im Thread gab es schon dikussionen dazu...
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

Roger

Hallo Tobias,
kannst Du bitte ein paar Änderungen in 98_Text2Speech.pm einbauen?
Diese habe ich aus diversen Beiträgen zusammengesucht und baue sie immer wieder nach Änderungen händisch ein.

Zunächst, dass auch Hostname bei remote zusätzlich zu IP-Adresse möglich ist.
Zeile 193:

alt: if($dev =~ m/^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/ ) {
neu: if($dev =~ m/^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/ || $dev =~ m/[^:]+:[0-9]+/) {


Dann damit Geräte mit mehreren IP-Adressen zuverlässig angesprochen werden können (beim Verbindungsaufbau Parameter MultiHomed)
Zeile 340:

alt: $conn = IO::Socket::SSL->new(PeerAddr => "$dev") if(!$@);
neu: $conn = IO::Socket::SSL->new(PeerAddr => "$dev", MultiHomed => 1) if(!$@);

und Zeile 342:

alt: $conn = IO::Socket::INET->new(PeerAddr => $dev);
neu: $conn = IO::Socket::INET->new(PeerAddr => $dev, MultiHomed => 1);


Und wenn Du Zeile 547 so ändern könntest (vielleicht über zusätzliches Reading), dass man auch ein komplett anderes Programm zur Wiedergabe starten kann. Ich nutze z.B. play, welches viel schneller als mplayer startet und die gleiche Funktion bietet.

alt: $cmd = $TTS_MplayerCall . " " . $mplayerAudioOpts . $AlsaDevice . " " .$NoDebug. " " . $mplayerOpts . " " . $file;
neu: $cmd = "play -q " . $file;


viele Grüße
Roger
Zotac & RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly, Victron