Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

marty29ak

Zitat von: Ellert am 19 Dezember 2015, 10:33:35
Das kannst Du mit einem DOIF lösen. http://fhem.de/commandref_DE.html#DOIF_repeatcmd
Text2Speech stellt m.W. keinen Befehl zur Verfügung, um die Ausgabe explizit abzubrechen.

Nimm doch eine kurze mp3-Datei und wiederhole die Ausgabe, s.o.

Vielleicht klappt es, eine kurze Ansage hinterher zu schieben, um das Vorhergehende abzubrechen.

Eine Ansage nach zu schieben hat leider nicht funktioniert, aber habe es jetzt mit einem DOIF und dem Attribut repeatcmd hin bekommen.
Danke für deine Hilfe!
Gruß Martin

stoxx

Hallo marty29ak,

Zitataber habe es jetzt mit einem DOIF und dem Attribut repeatcmd hin bekommen
kannst Du Deine Lösung mal kurz genauer beschreiben? Um den abgespielten MP3 Alarm abzubrechen, habe ich bisher immer den Raspberry durchstarten lassen, was zugegeben nicht die eleganteste Lösung ist ;-)
Mit DOIF kenn ich mich so garnicht aus..

Danke und Grüße
stoxx
Raspberry mit CUL, FS20, FHT, HMS, BLE, Z-Wave, Zigbee ..

marty29ak

#602
Du erstellst einen Dummy

define alarm dummy

dann in das Attribut  setList   state:on,off eintragen und in webCmd state

Jetzt einen DOIF erstellen

define di_alarm DOIF ([alarm] eq "on")(set MyTTS tts :alarm.mp3:)

Hier dann das Attribut repeatcmd mit der Zahl 1 setzen.

Das war`s.

Du kannst dann im Alarmmodul set alarm on zum auslösen  und entsprechend set alarm off zum Alarm abbrechen nutzen.

Die Alarm MP3 halt nicht zu lange erstellen, damit das nicht zu lange nachläuft.


Ps.: Hatte oben im Code ein DOIF vergessen und eben geändert. Sorry!
Gruß Martin

shady88

#603
Hallo, ich habe mich jetzt auch an Text2Speech gewagt und nach kleinen Startschwierigkeiten funktioniert jetzt alles außer, dass der Text 4-5 Sekunden zeitverzögert ausgegeben wird.

Ich habe Text2Speech wie im Wiki beschrieben installiert (http://www.fhemwiki.de/wiki/Text2Speech) wobei ich mir bei den "lokalen Sprachengines" nicht sicher bin, was damit gemeint ist. Ich hab hier nur "lame" installiert und die Umwandlung in MP3 scheint zu funktioniert.

Hier mal die Attribute:

TTS_MplayerCall /usr/bin/mplayer
TTS_UseMP3Wrap 1
room Text2Speech
verbose 5


Auszug aus dem Logfile:

2015.12.25 12:09:45 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2015.12.25 12:09:45 4: MyTTS: 0 => Alarmanlage wird in 30 Sekunden aktiviert
2015.12.25 12:09:45 4: Verwende TTS Spracheinstellung: Deutsch
2015.12.25 12:09:45 4: Text2Speech: Bearbeite jetzt den Text: Alarmanlage wird in 30 Sekunden aktiviert
2015.12.25 12:09:45 4: Text2Speech: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: e8c74049126e6d8adcf7e53c3c8dec09.mp3
2015.12.25 12:09:45 4: Text2Speech: cache/e8c74049126e6d8adcf7e53c3c8dec09.mp3 gefunden, kein Download
2015.12.25 12:09:45 4: Text2Speech_CalcMP3Duration: cache/e8c74049126e6d8adcf7e53c3c8dec09.mp3 hat eine Länge von 4 Sekunden.
2015.12.25 12:09:45 4: MyTTS: Text2Speech MyTTS playing: 1
2015.12.25 12:09:45 4: Text2Speech:/usr/bin/mplayer -ao alsa:device=hw=0.0  -nolirc -noconsolecontrols cache/e8c74049126e6d8adcf7e53c3c8dec09.mp3
Cannot find HOME directory.
MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team
Terminal type `unknown' is not defined.

Playing cache/e8c74049126e6d8adcf7e53c3c8dec09.mp3.
Detected file format: MP2/3 (MPEG audio layer 2/3) (libavformat)
[mp3 @ 0x75b64a38]Estimating duration from bitrate, this may be inaccurate
[lavf] stream 0: audio (mp3), -aid 0
Load subtitles in cache/
Selected audio codec: MPEG 1.0/2.0/2.5 layers I, II, III [mpg123]
AUDIO: 16000 Hz, 2 ch, s16le, 32.0 kbit/6.25% (ratio: 4000->64000)
AO: [alsa] 16000Hz 2ch s16le (2 bytes per sample)
[AO_ALSA] Unable to find simple control 'Master',0.
Video: no video
Starting playback...
A:   4.0 (04.0) of 4.0 (04.0)  0.5%                                             


Exiting... (End of file)



Das "Cannot find HOME directory." wirkt nicht so ganz richtig. Kann es sein, dass er die MP3 Dateien, die er 3 Zeilen darüber im "Cache" erstellt danach in das Home-Directory schreiben möchte, das jedoch nicht kann, weil er eben dieses nicht findet?
Allerdings schreibt er auch, dass er es im Cache "gefunden" hat und kein Download (von Google) stattfindet).

Edit: Habe den Cache "gefunden". Dort sind alle bereits einmal erstellten Dateien drin.

Zum Home-Directory:
Es existiert kein /home/fhem Directory auf meinem Raspberry mit raspian drauf. Eine manuelle Erstellung dieses Directories bringt nichts (Rechte richtig gesetzt).
Auch das Folgende führte zu keinem Ergebnis:
root@raspberrypi2:/etc# mkhomedir_helper fhem
root@raspberrypi2:/etc# cd /home/
root@raspberrypi2:/home# ls
pi

(kein fhem Home Dir :/ )

Ich hab nach diesem Cache und auch den erstellten MP3-Dateien mit dem MD5-Hashwert als Dateinamen gesucht, konnte dieser aber nirgends finden, d.h. dieser werden wohl direkt nach der Ausführung gelöscht?!
Edit: MP3-Dateien liegen im Cache

Am "längsten" bleibt er nach der Zeile "MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team" hängen.
Danach kommt "Terminal type `unknown' is not defined." - Da stimmt wohl auch was nicht. Aber viel sagt die Fehlermeldung nicht aus. Zumindest mir nicht.

Das Setzen der HOME-Variable in /etc/profile hat nichts gebracht.
Wird mplayer als "fhem" User ausgeführt? (Habe eine Standardinstallation durchgeführt) Edit: zu 99,9% wird er als "fhem"-User ausgeführt.

simonTS

Hi,

das Ding macht echt Spass! Würde gerne dem mplayer folgendes mitgeben
-af scaletempo -speed 1.2
Die Dame ist doch was langsam ;-) Geht das irgendwie als attr?
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

ChHerrm

Hallo!
Die Frage hatte ich schon in einem einzelnen Thema gestellt aber im Prinzip passt sie hier wohl besser hin:

Ich habe ein Problem mit der Sprachausgabe per Bluetooth-Lautsprecher dass ich trotz viel Recherchearbeit bislang nicht lösen konnte. Vom Raspberry Pi 2 kann ich den Bluetoothlautsprecher über
{system('mplayer -ao alsa:device=bluetooth /home/pi/NAS/Weckton.mp3')}

ein Lied abspielen lassen. Das Pairing und die Rechte scheinen also eher nicht das Problem zu sein. Was jetzt aber noch nicht geht, ist die Ausgabe von Sprache bzw. auch des Speakweather-Moduls und das Webstream Modul zwecks Radio. In der 98_Text2Speech.pm habe ich außerdem folgende Zeile angepasst:
my $mplayerAudioOpts = '-ao alsa:device=bluetooth';
Das interessiert FHEM jedoch erstmal herzlich wenig. Kann mir jemand damit auf die Sprünge helfen? :-\

PS: Sprache wird jetzt auch nicht mehr per Audiokabel ausgegeben nach der Anpassung. Scheint wohl irgendwie das Device so nicht zu finden (?)

Hier nochmal die Auswertung des Logfiles:

2016.01.15 17:15:20 4: Text2Speech:/usr/bin/mplayer -ao alsa:device=bluetoothhw=0.0  -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 100 cache/3c4f47c016c723c4c6ba0d0716a69822.mp3
MPlayer svn r34540 (Raspbian), built with gcc-4.6 (C) 2000-2012 MPlayer Team

Playing cache/3c4f47c016c723c4c6ba0d0716a69822.mp3.
libavformat version 53.21.1 (external)
Mismatching header version 53.19.0
Audio only file format detected.
Load subtitles in cache/
==========================================================================
Requested audio codec family [mpg123] (afm=mpg123) not available.
Enable it at compilation.
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
AUDIO: 16000 Hz, 1 ch, floatle, 32.0 kbit/6.25% (ratio: 4000->64000)
Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)
==========================================================================
[AO_ALSA] alsa-lib: pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM bluetoothhw:0,0
[AO_ALSA] Playback open error: No such file or directory
Failed to initialize audio driver 'alsa:device=bluetoothhw=0.0'
Could not open/initialize audio device -> no sound.
Audio: no sound
Video: no video

Otto123

#606
Warum fummelst Du in der Modul Datei rum? Zitat commandref
ZitatLocal Device
Die Ausgabe erfolgt auf angeschlossenen Audiodevices, zb. Lautsprecher direkt am Gerät oder per Bluetooth-Lautsprecher per Mplayer. Dazu ist Mplayer zu installieren.
apt-get install mplayer
Das angegebene Alsadevice ist in der /etc/asound.conf zu konfigurieren.
Special AlsaDevice: none
Ist als Alsa-Device none angegeben, so wird mplayer ohne eine Audiodevice Angabe aufgerufen. Dementsprechend verwendet mplayer das Standard Audio Ausgabedevice.

Beispiel:
define MyTTS Text2Speech hw=0.0
define MyTTS Text2Speech none

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

ChHerrm

#607
Okay, danke! Klingt sinnvoll, aber war noch nicht so zielführend. Ich habe MyTTS wie folgt angepasst:
define MyTTS Text2Speech pcm.bluetooth #hw=0.0
attr MyTTS TTS_MplayerCall /usr/bin/mplayer
attr MyTTS TTS_UseMP3Wrap 1
attr MyTTS verbose 5


In der /etc/asound.conf steht Folgendes:
pcm.bluetooth {
type bluetooth
device AA:AA:AA:AA:AA:AA
profile "auto"
}


Ich habe beim define sowohl nur bluetooth als auch pcm.bluetooth getestet. Beides funktioniert aber nicht. Wie muss ich das sonst angeben? ???


Edit: Okay jetzt gehts doch. Nicht nur FHEM sondern den ganzen Pi nochmal neu gestartet. Aber das Radio geht noch nicht. Wie kann ich das umstellen? :-\

Otto123

Was genau meinst Du mit Radio? Also welches Modul? MPD?
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

ChHerrm

#609
Das Modul von FHEM (http://www.fhemwiki.de/wiki/Modul_StreamRadio_Einrichtungshilfe), so habe ich es definiert:
define Radiostream StreamRadio /opt/fhem/log/WebStreams.txt
attr Radiostream group Radio
attr Radiostream icon rc_RADIO
attr Radiostream room Wohnzimmer
attr Radiostream telnetport 7072
attr Radiostream volume_command amixer cset numid=2 -- %Volume%


Das wird noch nicht über Bluetooth übertragen. Dafür will ich dann wie in der Anleitung aodevice hinzufügen also:
attr Radiostream aodevice -ao alsa:device=bluetooth
Da meint FHEM aber dass es das Attribut aodevice nicht für Radiostream gibt...

Edit: Das Attribut heißt inzwischen scheinbar nur noch aodev. Ton kommt aber trotzdem nicht:
attr Radiostream aodev -ao alsa:device=bluetooth

Otto123

Sorry da kann ich Dir nicht helfen und das ist jetzt auch ziemlich Off Topic.
Vielleicht solltest Du die Frage nochmal separat zu stellen.
Im Wiki steht ja auch, dass das Modul weit weg von perfekt ist.

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

Hollo

Zitat von: ChHerrm am 16 Januar 2016, 11:42:54
...
Edit: Okay jetzt gehts doch. Nicht nur FHEM sondern den ganzen Pi nochmal neu gestartet. Aber das Radio geht noch nicht. Wie kann ich das umstellen? :-\
Dir ist aber schon klar, dass (im Normalfall) nicht beides gleichzeitig geht !?
Wenn Du das TTS dafür definiert hast und nutzt; kannst Du nicht gleichzeitig "Musik" über das selbe PC-Audio-Device abspielen. Das bekommt beim Zugriff dann eigentlich ein "busy" gemeldet.
 
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Ellert

Ich möchte einen kleinen Schönheitfehler korrigieren.

Das Reading "playing" wird auch gesetzt, wenn Text2Speech als Remote definiert ist.
Im Remote-Betrieb hat "playing" keinen Sinn, da nur das entfernte Text2Speech die Ansage abspielt. Das lokale Text2Speech sendet nur den Befehl.

Änderung im Code:

Zeile 426    readingsSingleUpdate($hash, "playing", "1", 1);  Zeile löschen
Zeile 427      readingsSingleUpdate($hash, "playing", "1", 1); dann nach Zeile 426 einfügen


Mit der anliegenden Datei wird das Reading "playing" nur im "DIREKT" Modus bedient.
Grundlage der Änderung ist die Version: # $Id: 98_Text2Speech.pm 9758 2015-11-03 06:06:33Z tobiasfaust $

@Tobias: Würdest Du bitte die Änderung bei Gelegenheit übernehmen.

Lobot

Hallo Zusammen!

Ich habe mich auch mal an dem Text2Speech Modul versucht, bekomme es in Fhem jedoch nicht zu laufen.

MPlayer und Lautsprecher sind korrekt eingerichtet und funktionieren auch beim Abspielen von MP3 Files über die Console.

Binde ich das ganze in Fhem ein, bekomme ich folgendes im Log:

Zitat2016.01.27 15:13:34 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2016.01.27 15:13:34 4: MyTTS: 0 => Hallo Welt!
2016.01.27 15:13:34 4: Verwende TTS Spracheinstellung: Deutsch
2016.01.27 15:13:34 4: Text2Speech: Bearbeite jetzt den Text: Hallo Welt!
2016.01.27 15:13:34 4: Text2Speech: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: d8ec986b05f68a0d71bf7777a67cca5e.mp3
2016.01.27 15:13:34 4: Text2Speech: Verwende Google OnlineResource zum Download
2016.01.27 15:13:34 4: Text2Speech: Hole URL: http://translate.google.com/translate_tts?tl=de&client=t&prev=input&q=Hallo%20Welt%21
2016.01.27 15:13:34 4: Text2Speech: Schreibe mp3 in die Datei cache/d8ec986b05f68a0d71bf7777a67cca5e.mp3 mit 0 Bytes
2016.01.27 15:13:34 1: PERL WARNING: Use of uninitialized value $mp3Duration in string at ./FHEM/98_Text2Speech.pm line 610.
2016.01.27 15:13:34 4: Text2Speech:sudo /usr/bin/mplayer -ao alsa:device=hw=0.0  -nolirc -noconsolecontrols cache/d8ec986b05f68a0d71bf7777a67cca5e.mp3
MPlayer svn r34540 (Raspbian), built with gcc-4.6 (C) 2000-2012 MPlayer Team

Playing cache/d8ec986b05f68a0d71bf7777a67cca5e.mp3.
libavformat version 53.21.1 (external)
Mismatching header version 53.19.0


Exiting... (End of file)


Die Zeile
ZitatText2Speech: Schreibe mp3 in die Datei cache/d8ec986b05f68a0d71bf7777a67cca5e.mp3 mit 0 Bytes

fällt mir dabei auf, die erstellte MP3 hat wohl 0 Byte.

Woran kann der liegen? Berechtigungen wurden genau wie im Wiki incl. Neustart korrekt angelegt.

Ich würde mich freuen, wenn jemand einen Rat für mich hat.

Gruß, Martin

TeeVau

Zitat von: Ellert am 17 Januar 2016, 18:40:47
Ich möchte einen kleinen Schönheitfehler korrigieren.

Das Reading "playing" wird auch gesetzt, wenn Text2Speech als Remote definiert ist.
Im Remote-Betrieb hat "playing" keinen Sinn, da nur das entfernte Text2Speech die Ansage abspielt. Das lokale Text2Speech sendet nur den Befehl.

Änderung im Code:

Zeile 426    readingsSingleUpdate($hash, "playing", "1", 1);  Zeile löschen
Zeile 427      readingsSingleUpdate($hash, "playing", "1", 1); dann nach Zeile 426 einfügen


Mit der anliegenden Datei wird das Reading "playing" nur im "DIREKT" Modus bedient.
Grundlage der Änderung ist die Version: # $Id: 98_Text2Speech.pm 9758 2015-11-03 06:06:33Z tobiasfaust $

@Tobias: Würdest Du bitte die Änderung bei Gelegenheit übernehmen.

Hi,

ich bin mir nicht mehr genau sicher, glaube aber, dass das reading durch mich so eingeführt wurde. Das hat auch einen Grund:
Ich möchte im "Master" FHEM natürlich sehen, welchen Zustand das TTS Device hat, auch wenn es remote ausgeführt wird. Wie möchtest du sonst im Master-FHEM Steuerungen in Abhängigkeit von dem TTS machen? Ich triggere z.B. im Master-FHEM etwas (Musik aus schalten) wenn per TTS etwas abgespielt wird.
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen