Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

Audioausgabe von vordefinierten Audiodateien und Text - WM8960

Begonnen von Burny4600, 28 September 2024, 19:23:27

Vorheriges Thema - Nächstes Thema

Burny4600

Gibt es eine Möglichkeit vordefinierte Audiodateien über den Raspberry oder ein WM8960 Audio-Aufsteckmodul einzurichten?
Ich möchte diverse Textausgaben anstoßen.
Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

rudolfkoenig

Mit dem play Programm aus dem sox Paket kann man Audiodateien abspielen.
Externe Programm kann man aus FHEM mit der "<pgm>" Syntax aufrufen, also z.Bsp.:
define ntfyTuer notify tuer:open "play /opt/fhem/tuer_wurde_geoeffnet.mp3"

Otto123

Falls nix zu hören ist: Der user fhem muss sicher in der Gruppe audio sein, falls FHEM unter user fhem läuft.
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

Burny4600

#3
Danke für Eure Tipps.

Die Audioausgabe eines mp3 Files funktioniert wunderbar. Ich muss nur noch eine Lösung finden, damit sich die Lautstärke nach einem Neustart nicht verändert.
Ich verwende das "IBest WM8960 Hi-Fi Sound Card HAT", dass ich mir von Amazon besorgt hatte. Das Modul ist das gleiche wie von WaveShare.
Getestet habe ich es auf einem Pi3.

Installation der Soundkarte:
Clone Treiber:
git clone https://github.com/waveshare/WM8960-Audio-HAT

WM8960 Treiber installieren:
cd WM8960-Audio-HAT
sudo ./install.sh
sudo shutdown -r now1

Überprüfen ob der Treiber ordnungsgemäß installiert wurde:
sudo dkms status
wm8960-soundcard/1.0, 6.6.47+rpt-rpi-v7, armv7l: installed

Neustart des Sound-Karten-Service
sudo systemctl restart wm8960-soundcard.service

Soundkarten Test:

$ aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: Headphones [bcm2835 Headphones], Gerät 0: bcm2835 Headphones [bcm2835 Headphones]
  Sub-Geräte: 8/8
  Sub-Gerät #0: subdevice #0
  Sub-Gerät #1: subdevice #1
  Sub-Gerät #2: subdevice #2
  Sub-Gerät #3: subdevice #3
  Sub-Gerät #4: subdevice #4
  Sub-Gerät #5: subdevice #5
  Sub-Gerät #6: subdevice #6
  Sub-Gerät #7: subdevice #7
Karte 1: wm8960soundcard [wm8960-soundcard], Gerät 0: 3f203000.i2s-wm8960-hifi wm8960-hifi-0 [3f203000.i2s-wm8960-hifi wm8960-hifi-0]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 2: vc4hdmi [vc4-hdmi], Gerät 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

Auch der Test mit Text2Speech unter FHEM funktioniert bei den Tests.
list  MyTTS
Internals:
   ALSADEVICE hw:1,0
   DEF        hw:1,0
   FUUID      66ffb1b0-f33f-f4d2-6e93-731318616726715d
   MODE       DIRECT
   NAME       MyTTS
   NR         142
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     100
   eventCount 90
   READINGS:
     2024-10-05 17:18:32   duration       
     2024-10-05 17:18:32   lastFilename    audio/cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
     2024-10-05 17:19:07   playing         1
     2024-10-05 17:18:03   volume          100
   helper:
     TTS_PlayerOptions
     RUNNING_PID:
       abortFn    Text2Speech_AbortFn
       bc_pid     68
       finishFn   Text2Speech_Done
       fn         Text2Speech_DoIt
       pid        1062
       telnet     telnetForBlockingFn_1728141327.62942_127.0.0.1_60990
       terminated 1
       timeout    60
       abortArg:
       arg:
     Text2Speech:
       test
Attributes:
   TTS_CacheFileDir audio/cache
   TTS_Language Deutsch
   TTS_Language_Custom Deutsch
   TTS_MplayerCall AUDIODEV={device} /usr/bin/play -q -v $(({volume}*{volumeadjust}/10000)).$(({volume}*{volumeadjust}%10000)) {file}
   TTS_Ressource Google
   TTS_SpeakAsFastAsPossible 1
   TTS_UseMP3Wrap 1
   TTS_VolumeAdjust 150
   alias      Audio Player
   icon       rc_VOLUP
   room       _Audio
   verbose    4

Es ist derweilen aber nur das Wort test das ausgegeben wird.
Komplexere Wörter oder mehrere Wörter werden noch nicht ausgegeben.
Ich habe mit Text2Speech einiges getestet, aber die Ausgabe von Texten funktioniert nur unzuverlässig. Oft muss ich das System komplett durchstarten damit ein Wort ausgegeben werden kann. ZB test. Das ist aber schon das einzige Wort was ausgegeben wird.
Gewisse Attribute werden auch nicht übernommen. ZB. TTS_CacheFileDir auf opt/fhem/audio/cache oder audio/cache Änderung wird nicht übernommen. Als Reading findet man zwar audio/cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3 aber das File ist dort nicht vorhanden.

Oder TTS_FileTemplateDir kann nicht definiert werden. Hier kommt die Meldung Could not create directory:

Was sind die optimalen Einstellungen für komplexe Textausgaben?


Mfg Chris

Raspberry Pi 2-5, Betriebssystem: Bullseye Lite, Bookworm Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: FS20, IT, Homematic, MQTT, TEK603, WMR200, YouLess, S.USV, APC-USV, PV-Deye, PV-Fronius, Resol VBUS & DL2

gregorv

#4
als cache directory ist bei Dir audio/cache die mp3 Dateien sollten also da landen.
Prüfe mal die Berechtigungen von audio und cache beides sollte rw für den user fhem haben (im Normalfall) Falls bei Dir fhem unter einem anderen User als fhem läuft, muss dieser eben die Rechte erhalten.


Beliebige MP§ Dateien Abspielen geht auch:
Zitattts:
Setzen eines Textes zur Sprachausgabe. Um mp3-Dateien direkt auszugeben, müssen diese mit führenden und schließenden Doppelpunkten angegebenen sein. Die MP3-Dateien müssen unterhalb des Verzeichnisses TTS_FileTemplateDir gespeichert sein.
Das directory TTS_FileTemplateDir muss dafür existieren und natürlich die entsprechenden MP3 Dateien (z.B. DingDong.mp3) - beides kann man nur auf OS Ebene anlegen - und auf die Rechte achten.