Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

ZitatWas ist der Vorteil von Text2Speech, wenn ich Sonos bereits installiert habe?
Oder ist es egal?

Auch einige der Bose-Boxen können TTS - und ebenfalls nur über Google. Aber beispielsweise nicht die schicke und teure Bose ST300 :-((


Also, zur Sache: Für die Personalisierung der Haussteuerung ist es wichtig (und nicht nur eine Frage des WAF), dass das "Haus" mit einer Stimme spricht. Das ist wirklich eine Frage des guten User Interface Design.

Also entweder mit der Standardstimme von Google (die finde ich grauenhaft), oder mit einer der hervorragenden deutschen Stimmen von Ivona (inzwischen Amazon Polly). Bei mir sprechen alle Ausgabegeräte mit der Stimme "Marlene". Auf Android-Geräten geht das mit der alten Beta-Version des TTS-Paketes sogar kostenlos und ohne Amazon-Account.


Neben "live" und "on-the-fly" generierten Sprachpaketen spiele ich aber auch fertige MP3-Dateien ab. Es muss also nicht jedesmal Amazon bemüht werden, wenn eine meiner Kisten beim Zubettgehen sagt "Bitte an das Teewasser denken". Auch diese Dateien sind von Marlene besprochen, und die "Vorfertigung" bedeutet nicht nur die Einsparung von Bandbreite und Kosten, sondern auch eine deutliche Erhöhung der Antwortgeschwindigkeit.

Der endgültige Use-Case umfasst also: a.) Live-TTS, b.) Abspielen von MP3 und c.) eine Kombination derselben. c.) geht derzeit nur mit Text2Speech (und meinem in Arbeit befindlichen Add-On für das BOSEST-Modul)

LG

pah

Prof. Dr. Peter Henning

Noch ein kleiner Verbesserungsvorschlag zum Modul:

Einheitliche Benennungen der Sprachen - entweder nach dem Land, oder nach der Sprache. Und entweder Englisch, oder Deutsch - aber nicht die gegenwärtige Mischung aus allen Möglichkeiten

"Deutsch"       => "de",
                                          "English-US"    => "en-us",
                                          "Schwedisch"    => "sv",
                                          "France"        => "fr",
                                          "Spain"         => "es",
                                          "Italian"       => "it",
                                          "Chinese"       => "cn",
                                          "Dutch"


Vorschläge also:

1.Deutsch, Englisch-US, Schwedisch, Französisch, Spanisch, Italienisch, Chinesisch, Niederländisch. oder
2.German, English-US, Swedish, French, Spanish, Italian, Chinese, Dutch. oder
3.Deutsch, English-US, Svenska, Francais, Espanol, Italiano, Putonghua, Nederlands oder
4.Deutschland, USA, Schweden, Frankreich, Spanien, Italien, China, Niederlande oder
5.Germany, USA, Sweden, France, Spain, Italy, China, Netherlands oder
6.Deutschland, USA, Sverige, France, Espagna, Italia, Zhongguo, Nederlande

Es darf gerätselt werden, welches am wenigsten lächerlich aussieht...

LG

Prof. Dr. Peter Henning

Weitere Vorschläge fürs Modul:

1. Die Syntax, eine existierende Audiodatei mit :dateiname: zu kennzeichnen, ist schon ganz nett. Das ist kompakter als die SSML-Syntax <audio src="dateiname"/> - allerdings auch etwas mehrdeutig. Schön wäre es, wenn man beide Varianten alternativ benutzen könnte. Siehe dazu auch https://developer.amazon.com/de/docs/custom-skills/speech-synthesis-markup-language-ssml-reference.html#audio

2. Beim Dateinamen selber besteht die Problematik, viele vorhandene Dateien auseinander zu halten. Ich lege deshalb (wenn dies benötigt wird) ein Array mit allen Namen der im ttsDir vorhandenen Dateien an und kann dann die gesuchte Datei auch an Hand eines kurzen Namensbestandteils finden. Beispielsweise heißt eine Datei 024_vorratskeller.mp3 - die wird dann z.B. unter den beiden Varianten :024: und :vorrat: gefunden. Codeschnipsel dafür kann ich liefern.

3. Bei Splitten eines Textes an den Wortgrenzen taucht natürlich das Problem auf, dass SSML-Tags auseinandergerissen werden können. Das ist schade, weil damit viele SSML-Konstrukte gar nicht mehr benutzt werden können. Als Beispiel kann man sich einmal ansehen, was die Eingabe von
{Dumper(Text2Speech_SplitString(["Das ist ein Test, in dem ein kleiner Teil <amazon:effect name=\"whispered\">geflüstert</amazon:effect> wird"],10," ",0,"al"))}
auf der FHEM-Kommandozeile ergibt. Schön wäre also ein Mechanismus, der ein Splitten verhindert, wenn ein SSML-Tag begonnen wurde - bis zum Ende des Tags. Dann wären auch die ganzen Interjektionen aus SSML nutzbar.

LG

pah


Tobias

#1038
Hi pah
3. habe ich auch schon auf dem Schirm , aber da dies nur bei tts > 3000 Zeichen vorkommt erstmal nach hinten geschoben

Punkt 2 habe ich noch nicht wirklich verstanden, kannst du mir nicht für deine änderungswünsche einen pull request einstellen?

Punkt 1, das stimmt, nimmt man dank SSML man die sprachbausteine nur nutzen wenn man entsprechende speak end- und starttags darum herum setzt
Hast du eine bessere Idee? Pull requests sind sehr willkommen

Gesendet von iPhone mit Tapatalk
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

die aktuelle Version aus meinem GIT ist jetzt im FHEM Repo
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

ergerd

Hallo zusammen,

ich habe heute ein Update durchgeführt, das letzte war am 02.05.2019.

Das Modul 98_Text2Speech.pm killt jetzt mein FHEM, letzter Eintrag im Log:

Can't locate object method "my_home" via package "File::HomeDir" at ./FHEM/98_Text2Speech.pm line 326, <$fh> line 796.


Fehlt mir irgend etwas?

Danke und Grüße
Rainer
FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, C-Control II, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

Jörg

Hi,
kann ich bestätigen. Habe auch versucht, mich mit Polly anzufreunden, aber FHEM lässt sich nicht starten.
Can't locate object method "my_home" via package "File::HomeDir" at /opt/fhem/FHEM/98_Text2Speech.pm line 326, <$fh> line 20.

Meine Definition:
define Sprachausgabe Text2Speech hw=0.0
attr Sprachausgabe TTS_UseMP3Wrap 1
attr Sprachausgabe TTS_FileTemplateDir /opt/fhem/mp3
attr Sprachausgabe TTS_CacheFileDir /opt/cache_sprachausgabe
attr Sprachausgabe TTS_Language Deutsch
attr Sprachausgabe TTS_Quality 48khz_16bit_stereo
attr Sprachausgabe TTS_OutputFile /opt/cache_sprachausgabe/1/output.mp3
attr Sprachausgabe TTS_Ressource Amazon-Polly
attr Sprachausgabe room (z2)Sprachausgabe



LG Jörg

Invers

#1042
Hi, ich habe das Problem, die Lautstärkeeinstellung ignoriert wird, wenn ich die Lautstärke auf 0 setze. Es wird dann 100 Prozent verwendet. Andere Einstellungen gehen problemlos. Kann das jamand bestätigen und falls es ein Bug ist, korrigieren? Es ist nachts etwas lästig, wenn man angebrüllt wird.  ;D

Schonmal danke.

Internals:
   ALSADEVICE default
   DEF        default
   FUUID      5cce0752-f33f-8098-9661-8790c1ceafcd202e
   MODE       DIRECT
   NAME       MyTTS
   NR         19
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     0
   READINGS:
     2019-05-27 05:15:55   duration        1
     2019-05-27 05:15:55   endTime         00:00:00
     2019-05-27 05:15:56   lastFilename    cache/72a447622d75949ae7f378e7f01dd667.mp3
     2019-05-27 05:15:56   playing         0
     2019-05-27 05:15:45   volume          0
   helper:
     Text2Speech:
Attributes:
   TTS_FileMapping Glocke:glocke.mp3 Tischglocke:tischglocke.mp3
   TTS_FileTemplateDir /opt/fhem/mp3
   TTS_Language Deutsch
   TTS_MplayerCall /usr/bin/mplayer
   TTS_Quality 48khz_16bit_mono
   TTS_Ressource Google
   TTS_UseMP3Wrap 1
   TTS_noStatisticsLog 1
   room       System



Ausserdem bekomme ich eine Fehlermeldung im Log, obwohl mp3::info bei mir installiert ist:

CPAN: Module::CoreList loaded ok (v5.20170114_24)
MP3::Info is up to date (1.26).

Log:
2019.05.28 09:22:36 3: MP3::Info Modul fehlt, konnte MP3 Tags nicht entfernen

Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Tobias

Ich schau mir das an, eigentlich dachte ich alle Module-Loads sicher abgefangen zu haben



Gesendet von iPhone mit Tapatalk
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

Invers

Ich danke dir.
Ich habe keine besondere Konfiguration und mein fhem ist völlig neu aufgesetzt und alles komplett neu eingerichtet. Keinerlei Übernahmen aus der alten Installation.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

prodigy7

#1045
Guten Abend zusammen!

Ich habe den Eindruck, dass das Modul derzeit kaputt ist, wenn man TTS_MplayerCall verwendet: Allem Anschein nach wird der Pfad zur Datei nicht mehr übergeben. Ich hab mal in dem Skript, dass ich verwende, ein "set" eingebaut und die Umgebungsvariablen ausgegeben. Dabei sieht der relevante Teil so aus:


BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="/opt/bin/vlc-wrapper.sh")


Da sollte eigentlich so etwas stehen wie


BASH_ALIASES=()
BASH_ARGC=([0]="1")
BASH_ARGV=([0]="cache/392a03a908698a0925e5a2e832596aad.mp3")
BASH_CMDS=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="/opt/bin/vlc-wrapper.sh")


API wird aufgerufen, MP3 wird erstellt. Der Teil funktioniert also.
Update mit anschließendem Restart habe ich ausgeführt bei FHEM, aber keine Besserung/Änderung.

Edit:
Fehler gefunden! In einer älteren Version des Moduls gab es folgenden Abschnitt:

$cmd = $TTS_MplayerCall . " " . $mplayerAudioOpts . $AlsaDevice . " " .$NoDebug. " " . $mplayerOpts . " " . $file;

In der aktuellen Version sieht es so aus:

  # anstatt  mplayer wird ein anderer Player verwendet
  if ($TTS_MplayerCall !~ m/mplayer/) {
    $TTS_MplayerCall =~ s/{device}/$AlsaDevice/g;
    $TTS_MplayerCall =~ s/{volume}/$hash->{VOLUME}/g;
    $TTS_MplayerCall =~ s/{volumeadjust}/$TTS_VolumeAdjust/g;
    $TTS_MplayerCall =~ s/{file}/$file/g;

    $cmd = $TTS_MplayerCall;
  } else {
    $cmd = $TTS_MplayerCall . " " . $mplayerAudioOpts . $AlsaDevice . " " .$NoDebug. " " . $mplayerOpts . " " . $file;
  }

Der TTS_MplayerCall Aufruf ist natürlich sinnfrei, wenn ich dem so überhaupt keine Informationen übergebe. Ich würde eine Änderung wie folgt empfehlen:

  # anstatt  mplayer wird ein anderer Player verwendet
  if ($TTS_MplayerCall !~ m/mplayer/) {
    $TTS_MplayerCall =~ s/{device}/$AlsaDevice/g;
    $TTS_MplayerCall =~ s/{volume}/$hash->{VOLUME}/g;
    $TTS_MplayerCall =~ s/{volumeadjust}/$TTS_VolumeAdjust/g;
    $TTS_MplayerCall =~ s/{file}/$file/g;

    $cmd = $TTS_MplayerCall . " " . $file;
  } else {
    $cmd = $TTS_MplayerCall . " " . $mplayerAudioOpts . $AlsaDevice . " " .$NoDebug. " " . $mplayerOpts . " " . $file;
  }


Tobias

nein, wie du schon gesehen hast müssen in der neuen Version Templates verwendet werden. Steht auch so in der Commandref drin (hoffentlich)
Das musste ich machen um so generisch verschiedene Player anbinden zu können.
Also einfach die Templates nutzen und es funzt ;)

ein Beispiel:
attr <tts> TTSMplayerCall /usb/bin/play -ao {device} -file {file}
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

prodigy7

Okay, Danke! Verstanden und umgesetzt :-)

FHEM-Wohnung

#1048
Hallo, ich habe Debian 9 im LXC Container in Proxmox am laufen. Dies läuft auf dem Intel NUC.

Nun habe ich einmal den Intel Onboard Sound und eine externe Soundkarte. Diese läuft usb und wird an den Container weiter gereicht. Vorzugsweise würde ich ja gerne den Sound über Onboard verwenden.

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 8087:0aa7 Intel Corp.
Bus 001 Device 004: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter          <-------
Bus 001 Device 007: ID 046d:c227 Logitech, Inc. G15 Refresh Keyboard
Bus 001 Device 005: ID 046d:c226 Logitech, Inc. G15 Refresh Keyboard
Bus 001 Device 003: ID 046d:c223 Logitech, Inc. G11/G15 Keyboard / USB Hub
Bus 001 Device 002: ID 046d:c051 Logitech, Inc. G3 (MX518) Optical Mouse
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub



cat /proc/asound/cards
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xa1410000 irq 129
1 [Set ]: USB-Audio - C-Media USB Headphone Set
C-Media USB Headphone Set at usb-0000:00:15.0-4, full speed


alsamixer
cannot open mixer: No such file or directory

sudo aplay /usr/share/sounds/alsa/Front_Center.wav
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:788: audio open error: No such file or directory


Fhem Log
2019-06-03 21:42:16 Text2Speech MyTTS playing: 1
2019.06.03 21:42:16 4 : MyTTS: ermittelte CodePage: ascii , konvertiere nach UTF-82019.06.03 21:42:16 4 : MyTTS: MaxChar = 100, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter = 2019.06.03 21:42:16 4 : MyTTS: Auflistung der Textbausteine nach Aufbereitung:2019.06.03 21:42:16 4 : MyTTS: 0 => ww2019-06-03 21:42:16 Text2Speech MyTTS duration: 1
2019-06-03 21:42:16 Text2Speech MyTTS endTime: 00:00:00
2019-06-03 21:42:16 Text2Speech MyTTS lastFilename: cache/37e5f0055a8e6f63b6bb511497c5fd9b.mp3
2019.06.03 21:42:16 4 : MyTTS: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.2019-06-03 21:42:16 Text2Speech MyTTS playing: 0


Leider wird anscheint die Soundkarte nicht unter Debian erkannt. Was könnte ich tun?

Danke

tagedieb

Hallo zusammen
ich habe nach einem Serverausfall mein FHEM neu aufgesetzt, leider habe ich nun keine Ansagen mehr und ich habe im Moment auch keine Idee, wo ich noch ansetzten kann.Ich würde mich freuen, wenn mir jemand weiterhelfen könnte
Mein TTS
Internals:
   ALSADEVICE hw=0.0
   DEF        hw=0.0
   FUUID      5c475225-f33f-8a7d-4ecb-5083358739a82bb3
   MODE       DIRECT
   NAME       MyTTS
   NR         608
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     95
   READINGS:
     2019-07-08 16:10:49   duration        17
     2019-07-08 16:10:49   endTime         00:00:00
     2019-07-08 16:11:06   lastFilename    cache/831ba7dadcb3ed0dd270c8463ff28db2.mp3
     2019-07-08 16:11:06   playing         0
     2019-07-08 16:08:53   volume          95
   helper:
     Text2Speech:
Attributes:
   TTS_UseMP3Wrap 1
   room       Text2Speech
   userReadings VOLUME
   verbose    5


logauszug
2019.07.08 16:10:42.058 4: MyTTS: ermittelte CodePage: ascii , konvertiere nach UTF-8
2019.07.08 16:10:42.058 4: MyTTS: MaxChar = 100, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2019.07.08 16:10:42.058 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2019.07.08 16:10:42.058 4: MyTTS: 0 => probe
2019.07.08 16:10:42.260 4: MyTTS: Verwende TTS Spracheinstellung: Deutsch
2019.07.08 16:10:42.261 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 1db4f32dbff2fabe4c975814cab5d987.mp3
2019.07.08 16:10:42.262 4: MyTTS: Bearbeite per MP3Wrap jetzt den Text: probe
2019.07.08 16:10:42.265 4: MyTTS: cache/1db4f32dbff2fabe4c975814cab5d987.mp3 hat eine Länge von 1 Sekunden.
2019.07.08 16:10:42.266 4: MyTTS: sudo /usr/bin/mplayer -ao alsa:device=hw=0.0  -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 95 cache/1db4f32dbff2fabe4c975814cab5d987.mp3
2019.07.08 16:10:42.266 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:duration Val:1
2019.07.08 16:10:42.308 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:endTime Val:00:00:00
MPlayer 1.3.0 (Debian), built with gcc-6.2.1 (C) 2000-2016 MPlayer Team
Terminal type `unknown' is not defined.

Playing cache/1db4f32dbff2fabe4c975814cab5d987.mp3.
libavformat version 57.56.101 (external)
Mismatching header version 57.56.100
Audio only file format detected.
Load subtitles in cache/
==========================================================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 24000 Hz, 2 ch, s16le, 32.0 kbit/4.17% (ratio: 4000->96000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
[Mixer] No hardware mixing, inserting volume filter.
Video: no video
Starting playback...
A:   0.0 (00.0) of 0.9 (00.9) ??,?%                                             
A:   0.0 (00.0) of 0.9 (00.9)  0.9%                                             
A:   0.1 (00.0) of 0.9 (00.9)  0.8%                                             
A:   0.1 (00.1) of 0.9 (00.9)  0.9%                                             
A:   0.1 (00.1) of 0.9 (00.9)  0.9%                                             
A:   0.2 (00.1) of 0.9 (00.9)  1.0%                                             
A:   0.2 (00.2) of 0.9 (00.9)  1.0%                                             
A:   0.2 (00.2) of 0.9 (00.9)  1.0%                                             
A:   0.3 (00.2) of 0.9 (00.9)  1.0%                                             
A:   0.3 (00.3) of 0.9 (00.9)  1.0%                                             
A:   0.3 (00.3) of 0.9 (00.9)  1.1%                                             
A:   0.4 (00.3) of 0.9 (00.9)  1.1%                                             
A:   0.4 (00.3) of 0.9 (00.9)  1.0%                                             
A:   0.4 (00.4) of 0.9 (00.9)  1.0%                                             
A:   0.5 (00.4) of 0.9 (00.9)  1.0%                                             


Exiting... (End of file)
2019.07.08 16:10:43.748 4: MyTTS: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.


fehlende Pakete habe ich laut Wiki nachinstalliert
Sound ist onboard auf analog 3,5 Klinke eingestellt und auch da der Lautsprecherangeschlossen :-)
es soll das ganz normale TTS funktionieren (ohne Bluetooth, ohne alexa etc)

sollte das das übel sein?
sudo dpkg --install pico2wave.deb
dpkg: Fehler beim Bearbeiten des Archivs pico2wave.deb (--install):
Paket-Architektur (armhf) passt nicht zum System (i386)
Fehler traten auf beim Bearbeiten von:
pico2wave.deb


vg tagedieb

über Hilfe würde ich mich freuen


FHEM 5.6 auf Cubitruck
CUL und Cul 868 und 2 HM LAN an Zbox
Remoteserver auf 2.Zboxi
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-SW1-FM,HM-LC-SW4-PCB,HM-LC-Sw1PBU-FM,HM-PB-2-WM55,HM-PB-6-WM55,HM-SCI-3-FM,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SC-2,HM-SEC-TIS,HM-WDS10-TH-O u.viele mehr
diverse IT Empfänger und LW3