Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Otto123

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

chunter1

Zitat von: Tobias am 09 März 2017, 14:25:14
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...

TTS_speakAsFastAsPossible auf 1 setzten hat leider nicht geholfen.
Werd wohl bei der Lösung mit TTS_UseMP3Wrap = 0 bleiben.

Wie gesagt, das Problem tritt nur auf, wenn eine mp3-Datei mit abgespielt wird, sonst nicht.
Hat es möglicherweise seit neuestem etwas mit der Samplerate der mp3-Datei zu tun?

Tobias

#737
@Roger, das mit Multihomed hatte ich schon gleich mit eingebaut... den Rest noch nicht

@chunter1, soweit ich weiß tritt das auf, wenn die Dateien unterschiedliche Bit- oder Sampleraten haben. Das liegt dann aber am mp3wrap selbst :( da kann ich nix machen
Kannst du bitte mal das Mickeymousestimmen mp3 hier anhängen?
* das fertige MP3WRAP File
* die einzelnen Tracks die im MP3WRAP file drin sind

Ich will mal versuchen das nachzustellen
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

fhemhurz

#738
Hallo zusammen,

ich setze dieses Modul schon lange ein und bin damit sehr zufrieden. Nun hätte ich eine Bitte bzw. Anregung für einen kleinen "Fix", der zumindest mir das (FHEM-)Leben erleichtern würde ;)

Ich verwende kein Alsa-Device sondern mpg123 für die mp3-Ausgabe. Dazu dürfen natürlich keine Alsa-spezifischen Parameter beim Aufruf von mpg123 übergeben werden, was aber in der Funktion Text2Speech_BuildMplayerCmdString so geschieht.

Als Fix müssen in dieser Funktion im Falle eines Nicht-Alsa-Devices "nur 2 Zeilen" eingefügt werden:
Zitat
sub Text2Speech_BuildMplayerCmdString($$) {
...
  my $AlsaDevice = $hash->{ALSADEVICE};
  if($AlsaDevice eq "none") {
    $AlsaDevice = "";
    $mplayerAudioOpts = "";
    $mplayerNoDebug = "";
    $mplayerOpts = "";
  }
...

$mplayerNoDebug und $mplayerOpts werden bei der Initialisierung am Modul-Anfang immer mit Alsa-spezifischen Werten vorbelegt und müssen hier nur zurückgesetzt werden.

Ich hatte das schon mal hier: https://forum.fhem.de/index.php/topic,18481.msg311903/topicseen.html#msg311903 beschrieben, was aber wohl irgendwie untergegangen war.
Da ich nach jedem Update des Moduls manuell die 2 Zeilen in den Source-Code einfügen muss, dies aber meistens vergesse und dann der Raspi schweigt, wäre es echt toll, wenn die Änderung aufgenommen werden könnte.

EDIT: Ich glaube diese Änderung wäre auch die Lösung für Rogers https://forum.fhem.de/index.php/topic,18481.msg602425.html#msg602425 letzten Änderungswunsch:
Zitat
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.
CUL 868, CUL 433, Signalduino, HUE, deCONZ, ESPEasy, Intertechno, Siro, FritzBox 7490, Raspberry Pi 1 2 3

fhemhurz

Nachdem ich gerade die beiden Zeilen (s. voriges Posting) wieder manuell eingefügt hatte, spricht mein Raspi trotzdem nicht mehr mit mir :( Der Grund ist die neu eingeführte Server-Option: 
Ich definiere mein TTS-Device (Kein AlsaDevice !) gemäß CommandRef so:

define MYTTS Text2Speech none
attr MYTTS TTS_UseMP3Wrap 1
attr MYTTS TTS_MplayerCall sudo /usr/bin/mpg123 -q
attr MYTTS verbose 4


Nun hat sich aber seit dem neuen Sever-Feature die Interpretation des AlsaDevice-Parameters none geändert. Bisher wurde, wenn für Alsa-Device none angegeben wurde, mplayer (aka TTS_MplayerCall) ohne eine Audiodevice Angabe aufgerufen.
Jetzt wird none als Sever-Mode-Switch verwendet und es erfolgt keine Sprachausgabe mehr. Der Direct-Mode ist ohne Angabe eines AlsaDevices also nicht mehr möglich.
CUL 868, CUL 433, Signalduino, HUE, deCONZ, ESPEasy, Intertechno, Siro, FritzBox 7490, Raspberry Pi 1 2 3

Tobias

#740
Zitat von: fhemhurz am 11 März 2017, 14:50:25
Hallo zusammen,

ich setze dieses Modul schon lange ein und bin damit sehr zufrieden. Nun hätte ich eine Bitte bzw. Anregung für einen kleinen "Fix", der zumindest mir das (FHEM-)Leben erleichtern würde ;)

Ich verwende kein Alsa-Device sondern mpg123 für die mp3-Ausgabe. Dazu dürfen natürlich keine Alsa-spezifischen Parameter beim Aufruf von mpg123 übergeben werden, was aber in der Funktion Text2Speech_BuildMplayerCmdString so geschieht.

Als Fix müssen in dieser Funktion im Falle eines Nicht-Alsa-Devices "nur 2 Zeilen" eingefügt werden:
$mplayerNoDebug und $mplayerOpts werden bei der Initialisierung am Modul-Anfang immer mit Alsa-spezifischen Werten vorbelegt und müssen hier nur zurückgesetzt werden.

Ich hatte das schon mal hier: https://forum.fhem.de/index.php/topic,18481.msg311903/topicseen.html#msg311903 beschrieben, was aber wohl irgendwie untergegangen war.
Da ich nach jedem Update des Moduls manuell die 2 Zeilen in den Source-Code einfügen muss, dies aber meistens vergesse und dann der Raspi schweigt, wäre es echt toll, wenn die Änderung aufgenommen werden könnte.

EDIT: Ich glaube diese Änderung wäre auch die Lösung für Rogers https://forum.fhem.de/index.php/topic,18481.msg602425.html#msg602425 letzten Änderungswunsch:

Hi,
bis auf Rogers Servernamen (anstatt IP-Adressen) habe ich alles eingebaut.
Bitte beachtet, das das special AlsaDevice nun nicht mehr "none" ist, sondern "default"
Sorry, das special AlsaDevice hatte ich bei der Implementation der Server Option völlig übersehen :(

Bitte testet mal die angehängte 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

fhemhurz

Vielen Dank für die prompte Erledigung! Ich habe getestet und alles funktioniert, zumindest aus meiner Sicht, jetzt wunschgemäß \o/
CUL 868, CUL 433, Signalduino, HUE, deCONZ, ESPEasy, Intertechno, Siro, FritzBox 7490, Raspberry Pi 1 2 3

Tobias

Super,
btw: mit der serverfunktionalität verfolge ich das Ziel, das die Kern TTS Funktionalität hier in diesem Modul gekapselt bleibt und alle Audio-Module sich hier bedienen können.
Es ist IMHO völlig irrsinnig und verschwendete Ressourcen dasselbe woanders immer und immer wieder nachzubauen ;)
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

JoWiemann

Hallo,

ich habe wohl noch einen Fehler in Text2Speech gefunden. Auf einem meiner RPi läuft Fhem aus historischen Gründen unter /usr/share/fhem. Ich hatte zunächst vergessen TTS_CacheFileDir zu setzen. Als folge läuft Text2Speech auf einen Fehler in der sub Text2Speech_DoIt($) bei:
Code: [Auswählen]
  unless(-e $TTS_CacheFileDir or mkdir $TTS_CacheFileDir) {
    #Verzeichnis anlegen gescheitert
    Log3 $hash->{NAME}, 2, "Text2Speech: Angegebenes Verzeichnis $TTS_CacheFileDir konnte erstmalig nicht angelegt werden.";
    return undef;
  }

Dadurch wird $hash->{helper}{RUNNING_PID} nicht gelöscht und Text2Speech funktioniert erst wieder, wenn Fhem neu gestartet wird.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

martin2day

Guten Abend,

ich nutze dieses sehr schöne Tool bereits auf meinem FHEM Server und gebe damit Ereignisse vom Kalender aus.
Da meine Frau davon recht angetan ist, habe ich versucht auf dem WLAN Radio (Raspberry + HifiBerryAmp) ebenfalls die Sprachausgaben zu aktivieren.
Dazu habe ich ein zweites FHEM installiert und wie in der Anleitung (https://wiki.fhem.de/wiki/Text2Speech) erst einmal direkt aus dem FHEM auf dem zweiten Raspberry die Ausgabe versucht.

Die Lautsprecher gehen zwar an, aber ich höre keine Sprache. Wie kann das sein?
2017.03.19 17:49:54 4: TTS_BadOG: Auflistung der Textbausteine nach Aufbereitung:
2017.03.19 17:49:54 4: TTS_BadOG: 0 => Test Hallo
2017.03.19 17:49:54 4: Verwende TTS Spracheinstellung: Deutsch
2017.03.19 17:49:54 4: Text2Speech: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: e73c942070af13045c7ee77855c224a3.mp3
2017.03.19 17:49:54 4: Text2Speech: Verwende Google OnlineResource zum Download
2017.03.19 17:49:54 4: Text2Speech: Hole URL: http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Test%20Hallo
2017.03.19 17:49:55 4: Text2Speech: Schreibe mp3 in die Datei cache/e73c942070af13045c7ee77855c224a3.mp3 mit 4320 Bytes
2017.03.19 17:49:55 4: Text2Speech: Bearbeite jetzt den Text: Test Hallo
2017.03.19 17:49:55 4: Text2Speech: cache/e73c942070af13045c7ee77855c224a3.mp3 gefunden, kein Download
2017.03.19 17:49:55 4: Text2Speech_CalcMP3Duration: cache/e73c942070af13045c7ee77855c224a3.mp3 hat eine Länge von 1 Sekunden.
2017.03.19 17:49:55 4: Text2Speech:/usr/bin/mplayer -ao alsa:device=hw=0.0  -nolirc -noconsolecontrols cache/e73c942070af13045c7ee77855c224a3.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/e73c942070af13045c7ee77855c224a3.mp3.
Detected file format: MP2/3 (MPEG audio layer 2/3) (libavformat)
[mp3 @ 0x75bbc5b8]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: 24000 Hz, 2 ch, s16le, 32.0 kbit/4.17% (ratio: 4000->96000)
AO: [alsa] 22050Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A:   0.0 (00.0) of 1.1 (01.0) ??,?%                                             
A:   0.3 (00.2) of 1.1 (01.0)  1.2%                                             
A:   0.5 (00.4) of 1.1 (01.0)  1.1%                                             
A:   0.7 (00.7) of 1.1 (01.0)  1.1%                                             
A:   0.7 (00.7) of 1.1 (01.0)  1.1%                                             
A:   0.8 (00.7) of 1.1 (01.0)  1.1%                                             
A:   0.8 (00.7) of 1.1 (01.0)  1.1%                                             
A:   0.8 (00.7) of 1.1 (01.0)  1.1%                                             
A:   0.8 (00.8) of 1.1 (01.0)  1.1%                                             
A:   0.8 (00.8) of 1.1 (01.0)  1.1%                                             
A:   0.9 (00.8) of 1.1 (01.0)  1.1%                                             
A:   0.9 (00.8) of 1.1 (01.0)  1.1%                                             
A:   0.9 (00.8) of 1.1 (01.0)  1.1%                                             
A:   0.9 (00.9) of 1.1 (01.0)  1.1%                                             
A:   0.9 (00.9) of 1.1 (01.0)  1.1%                                             
A:   1.0 (00.9) of 1.1 (01.0)  1.1%                                             
A:   1.0 (00.9) of 1.1 (01.0)  1.1%                                             
A:   1.0 (00.9) of 1.1 (01.0)  1.1%                                             
A:   1.0 (01.0) of 1.1 (01.0)  1.1%                                             
A:   1.0 (01.0) of 1.1 (01.0)  1.1%                                             


Exiting... (End of file)


Device:
Internals:
   ALSADEVICE hw=0.0
   DEF        hw=0.0
   MODE       DIRECT
   NAME       TTS_BadOG
   NR         20
   STATE      Initialized
   TYPE       Text2Speech
   Readings:
     2017-03-19 17:49:55   duration        1
     2017-03-19 17:49:55   endTime         00:00:00
     2017-03-19 17:49:56   lastFilename    cache/e73c942070af13045c7ee77855c224a3.mp3
     2017-03-19 17:49:56   playing         0
     2017-03-19 15:19:38   volume          100
   Helper:
     Text2Speech:
Attributes:
   TTS_MplayerCall /usr/bin/mplayer
   TTS_UseMP3Wrap 1
   room       Text2Speech
   verbose    5


Wähle ich den Text länger, dann höre ich auch, dass die Lautsprecher länger eingeschaltet sind.
Weiterhin finde ich unter global das Attribut globalpassword nicht wie es in der Anleitung für Client Server beschrieben ist?

Ich bitte um Hilfe. :-)

Gruß Martin

Otto123

#745
Zitat von: martin2day am 19 März 2017, 17:56:25
Die Lautsprecher gehen zwar an, aber ich höre keine Sprache. Wie kann das sein?
Hallo Martin,

falscher Soundausgang? HDMI statt analog oder umgekehrt?
user fhem nicht in der Gruppe audio? sudo gpasswd -a fhem audio

Funktioniert "speaker-test -t sine -f 440 -c 2 -s 1" in der FHEM Kommandozeile an dem System wo die Lautsprecher  angeschlossen sind?

Das Passwort wird jetzt über allowed definiert. Das globale Passwort unter global gibt es schon eine Weile nicht mehr.

Der Wiki Artikel muss eigentlich überarbeitet werden, ich habe auf die Schnelle mal das mit dem Passwort korrigiert.

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

martin2day

Hallo Otto,

der Soundtest aus FHEM funktioniert.
Da ich über Airplay und auch über MPD bereist den Raspberry nutze, gehe ich davon aus das hier auch die richtige Soundausgabe eingestellt ist.
Hier mal meine Konfiguration:

pi@Bad_OG:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_amp], device 0: HifiBerry AMP HiFi tas5713-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
pi@Bad_OG:~ $ amixer
Simple mixer control 'Master',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 248
  Mono: 112 [45%]
Simple mixer control 'Channels',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 248
  Front Left: 218 [88%]
  Front Right: 218 [88%]


In der Gruppe ist der Nutzer auch aufgenommen.
Wie gesagt, man hört das die Lautsprecher angehen, es knackt beim einschalten und dann rauscht es laut... aber keine Sprache kommt. Nach kurzer Zeit ist es wieder leise. Gebe ich einen längeren Text ein, dann rauscht es auch lauter...

Gruß Martin

Otto123

Hi Martin,

ok erst jetzt gesehen - > 2017.03.19 17:49:55 4: Text2Speech_CalcMP3Duration: cache/e73c942070af13045c7ee77855c224a3.mp3 hat eine Länge von 1 Sekunden.

Ich denke die mp3 Datei ist "keine", versuch die mal mit etwas anderem abzuspielen oder schau die mit einem Texteditor an.

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

martin2day

Hallo Otto,

doch, die MP3 funktioniert wunderbar wenn ich sie auf dem MAC runterlasse und abspiele.
Der Sonntest aus FHEM heraus funktioniert ja auch....
Wo soll da das Problem liegen? WLAN Radio und Airplay gehen ja auch.... sehr komisch.

Martin

Wzut

Zitat von: martin2day am 19 März 2017, 19:00:31
und auch über MPD bereist den Raspberry nutze, gehe ich davon aus das hier auch die richtige Soundausgabe eingestellt ist.
d.h. der MPD und Text2Speech benutzen das gleiche Alsa Device zur gleichen Zeit ?
Hat bei mir nie geklappt ...
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher