Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

Panik

Zitat von: Martin Fischer am 16 November 2021, 18:39:14
Wenn auch spät aber ggf. für andere festgehalten.

Zum einen böte es sich an mit Screen zu arbeiten. Dann schlagen Verbindungsabbrüche nicht ins Gewicht. Alle weiteren hier gezeigten Eingaben, erfolgen unter dem root User. Alternativ auch mittels sudo:

(usw.)

Viel Erfolg!

@Martin:
Vielen Dank für die Ausführliche Antwort.

Ich bleibe, wie schon am 11.Sept. geschrieben, bei der viel einfacheren aws-Installation über Python und dessen Pip.
Über ein Script mache ich dann die nötigen Aufrufe.
So hab ich alles selber in der Hand.

Danke trotzdem.
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

ergerd

Hallo zusammen,

ich nutze Text2Spech in der Standardeinstellung, also mit Google Cloud.

Es werden nur Texte die max. 200 Zeichen enthalten ausgegeben, längere nicht.
Gibt es da eine Grenze?

Ich habe auch versucht die längeren Texte direkt im Browser auszuführen, da erhalte ich schon eine Fehlermeldung, wenn sie mehr als 200 Zeichen enthalten.

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

Ellert

Das Modul kennt keine Grenze. Sehr lange Texte werden durch den BlockingCall Timeout begrenzt, der ist aber einstellbar.

ergerd

FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

PSI69

Mahlzeit!

Ich will TTS überwiegend zur Textausgabe nutzen, so weit so gut... Die Ausgabe erfolgt mittels Amazon Stimme über bluealsa, auch so weit OK.

Aber; im Jahr 2015 war folgendes hier im Modul schon einmal Thema:

Mein Problem ist, ich habe ein längeres selbst erstelltes MP3 File (Alarmanlage wird ausgelöst), was beim Entschäften der Alarmanlage gestoppt werden soll - also die Ausgabe vom MP3 über TTS Device. Ein 'set TTS Stop' o.ä. gibt es aktuell nicht, es hilft auch nicht eine weitere kurze Textausgabe hinterher zu schicken, dito für ein weiteres MP3 File. D.h. meine 67 Sekunden lange Ausgabe plärrt immer bis zum Ende.

Hat das Thema schon jemand lösen können bei sich?

2023.02.09 13:48:27 4: MyTTSa: 0 => Test
2023.02.09 13:48:27 4: MyTTSa: Verwende TTS Spracheinstellung: Deutsch
2023.02.09 13:48:27 4: MyTTSa: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 1885ae4bdca1e1546de1492a880fee55.mp3
2023.02.09 13:48:27 4: MyTTSa: Bearbeite per MP3Wrap jetzt den Text: Test
2023.02.09 13:48:27 4: MyTTSa: /opt/fhem/cache/a/1885ae4bdca1e1546de1492a880fee55.mp3 hat eine Länge von 1 Sekunden.
2023.02.09 13:48:27 4: MyTTSa: /usr/bin/mplayer -ao alsa:device=bluealsa -really-quiet -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 30 /opt/fhem/cache/a/1885ae4bdca1e1546de1492a880fee55.mp3 >/dev/null
2023.02.09 13:48:29 4: MyTTSa: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.
2023.02.09 13:48:37 4: MyTTSa: ermittelte CodePage: ascii , konvertiere nach UTF-8
2023.02.09 13:48:37 4: MyTTSa: MaxChar = 3000, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2023.02.09 13:48:37 4: MyTTSa: Auflistung der Textbausteine nach Aufbereitung:
2023.02.09 13:48:37 4: MyTTSa: 0 => test
2023.02.09 13:48:38 4: MyTTSa: Verwende TTS Spracheinstellung: Deutsch
2023.02.09 13:48:38 4: MyTTSa: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: ace6e4adaa68b0a82025cc4d5afaa7cc.mp3
2023.02.09 13:48:38 4: MyTTSa: Bearbeite per MP3Wrap jetzt den Text: test
2023.02.09 13:48:38 4: MyTTSa: /opt/fhem/cache/a/ace6e4adaa68b0a82025cc4d5afaa7cc.mp3 hat eine Länge von 1 Sekunden.
2023.02.09 13:48:38 4: MyTTSa: /usr/bin/mplayer -ao alsa:device=bluealsa -really-quiet -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 30 /opt/fhem/cache/a/ace6e4adaa68b0a82025cc4d5afaa7cc.mp3 >/dev/null
2023.02.09 13:48:39 4: MyTTSa: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.
2023.02.09 13:48:52 4: MyTTSa: ermittelte CodePage: ascii , konvertiere nach UTF-8
2023.02.09 13:48:52 4: MyTTSa: MaxChar = 3000, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2023.02.09 13:48:52 4: MyTTSa: Auflistung der Textbausteine nach Aufbereitung:
2023.02.09 13:48:52 4: MyTTSa: 0 => /opt/fhem/mp3/099_Selbstzerstoerung.mp3
2023.02.09 13:48:52 4: MyTTSa: Verwende TTS Spracheinstellung: Deutsch
2023.02.09 13:48:52 4: MyTTSa: /opt/fhem/mp3/099_Selbstzerstoerung.mp3 als direkte MP3 Datei erkannt!
2023.02.09 13:48:52 4: MyTTSa: Bearbeite per MP3Wrap jetzt den Text: /opt/fhem/mp3/099_Selbstzerstoerung.mp3
2023.02.09 13:48:52 4: MyTTSa: /opt/fhem/mp3/099_Selbstzerstoerung.mp3 hat eine Länge von 67 Sekunden.
2023.02.09 13:48:52 4: MyTTSa: /usr/bin/mplayer -ao alsa:device=bluealsa -really-quiet -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 30 /opt/fhem/mp3/099_Selbstzerstoerung.mp3 >/dev/null
2023.02.09 13:49:04 4: MyTTSa: ermittelte CodePage: ascii , konvertiere nach UTF-8
2023.02.09 13:49:04 4: MyTTSa: MaxChar = 3000, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2023.02.09 13:49:04 4: MyTTSa: Auflistung der Textbausteine nach Aufbereitung:
2023.02.09 13:49:04 4: MyTTSa: 0 => Test
2023.02.09 13:49:55 1: Timeout for Text2Speech_DoIt reached, terminated process 14122
2023.02.09 13:49:55 2: MyTTSa: BlockingCall for MyTTSa was aborted


Danke und Tschau,
Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

Otto123

Hallo Peter,

mplayer rennt ja weiter. Du kannst maximal versuchen "pkill mplayer" loszuschicken.
auf Terminal Ebene eben probiert und das funktioniert

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

PSI69

Danke, ich stelle das nach und konfiguriere das als zusätzliches Kommando beim/nach dem Entschärfen. Klingt gut; melde mich wieder...
Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

PSI69

@Otto123
Klappt natürlich. Schön! Dann läuft die Sprachausgabe ab jetzt im Testbetrieb mit reduzierter Lautstärke. Mal sehen, ob sich der BT Lautsprecher abhängt, oder ob die Verbindung dauerhaft durchläuft/durchhält...

So zur Statusabfrage der BT Verbindung, wie macht ihr so etwas? Mit 'echo -e "info F4:2B:7D:01:66:9B" | bluetoothctl' bekomme ich ja den Status zurück:
Agent registered
[Soundcore 3]# info F4:2B:7D:01:66:9B
Device F4:2B:7D:01:66:9B (public)
        Name: Soundcore 3
        Alias: Soundcore 3
        Class: 0x00240414
        Icon: audio-card
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: Vendor specific           (0cf12d31-fac3-4553-bd80-d6832e7b3117)
        UUID: Vendor specific           (0cf12d31-fac3-4553-bd80-d6832e7c3117)
        Modalias: bluetooth:v03E0p2835d0100


Sprich, unter Connected steht yes...

Und das hier 'echo -e "info F4:2B:7D:01:66:9B" | bluetoothctl | grep Connected' ist noch besser:
        Connected: yes

Wie bekomme ich den String auswertbar in FHEM zurück aus einem Shell Aufruf?

... so, dass ich reagieren kann und ein 'echo -e "connect F4:2B:7D:01:66:9B' | bluetoothctl' abfeuern kann; oder besser alles in ein Shell Script? Wobei das im Prinzip ja auf ein regelmäßiges Polling/ eine regelmäßige Prüfung heraus laufen würde, also kann ich gleich regelmäßig ein 'echo -e "connect F4:2B:7D:01:66:9B' ausführen?

Meinugen dazu???

Schönes WE,
Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

Otto123

Hallo Peter,

BT Anwesenheit mache ich mit dem Precense Modul im model local-bluetooth.

ZitatWie bekomme ich den String auswertbar in FHEM zurück aus einem Shell Aufruf?
Ginge mit etwas Perl Code und qx() - ist aber eben leider im FHEM blockierend.
Du kannst aber Shell Code nonblocking absetzen und im Shell Code FHEM den Wert über das Interface zurückgeben.
Vorschläge:
* mit fhem.pl im Client Modus über Telnet Port
* über meinen "HTTP Client" https://github.com/heinz-otto/fhemcl
* oder - wenn Du sowieso MQTT im Einsatz hast - über MQTT. Dazu habe ich ein universelles Monitor Script entwickelt: https://github.com/heinz-otto/raspberry/tree/master/monitor

Letzteres fände ich persönlich am elegantesten - wenn Du sowieso das Telnet Device definiert hast, ist die erste Variante am einfachsten.

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

PSI69

Ok, danke Otto!
BT Anwesenheit mit Precense, auch gut - nicht daran gedacht...
Da ich diverse MQTT devices habe, schaue ich mir Dein script dazu an!
Gruß Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

Prof. Dr. Peter Henning

Klar habe ich das gelöst.

Allerdings nicht mit mplayer - der ist mir viel zu ressourcenfressend. Ich spiele meine MP3-Dateien mit mpg123 ab.

Dazu verwende ich in FHEM ein paar Routinen

use Audio::Play::MPG123;
use Audio::Alsa::Mixer;
...
#############################################################################
#
#  event handler for local mpg123
#
#############################################################################

sub mpg123_eventhandler($$){ 
  my ($playdev,$event) = @_;
 
  return
    if($event =~ /playinfo.*/);
 
  Log 1,"[mpg123_eventhandler] called with $playdev and event $event";
 
  my ($hash,$src,$srd,$cha,$fil,$isl,$vol,$volnew,$trk,$ret);

  $hash = $defs{$playdev};
 
  $vol = ReadingsVal($playdev,"volume",undef);
  $trk = ReadingsVal($playdev,"track","");
 
  #-- on: normalize the source which is stored already in the origin reading,
  #       then start the player
  #-- origin <source>: normalize the source which is in the parameter,
  #       store it in the origin reading, then start the player
  if( $event =~ /^(origin)|(on).*/ ){
    if( $event =~ /origin: (.+)/ ){
      $src = $1;
    }else{
      $src = ReadingsVal($playdev,"origin","");
    }
    ($src,$srd,$cha,$fil,$isl) = audio_source($src);
   
    #-- artist not found
    if( $isl == -1 ){
      Log 1,"[mpg123_eventhandler] called with invalid source $src";
      speak($playdev,"Es tut mir leid, diese Quelle kann ich nicht finden");
      return;
    #-- artist found, need to fill the playlist first
    }elsif( $isl == 2 ){
      fhem("attr Playlister MediaList_PlayerDevice $playdev");
      fhem("trigger Playlister playartist"); 
      return;
    }
   
    fhem("setreading $playdev origin $src");
    fhem("setreading $playdev listfil $fil");
    fhem("setreading $playdev listsrc $isl");
   
    #-- safeguard against high volume
    #   TODO: Nur beim Start
    if( $vol > 35 ){
      fhem("setreading $playdev volume 35");
      Log 1, "[mpg123_eventhandler] enforcing volume 35";
      $vol = 35;
    }
    alsa_setvolume($vol);
   
    #-- start the player
    my $player = new Audio::Play::MPG123;;
    $hash->{helper}{player} = $player;
    fhem("setstate $playdev on");
    Log 1,"[mpg123_eventhandler] started Player with ".(($isl==0)?"file source ":"list source ").$fil;
   
    #-- single file
    if($src =~ /(SWR)|(speech)/){ 
      $player->load($fil);
      fhem("setreading $playdev listpos -");
    }else{
      $player->loadlist(1,$fil);
      fhem("setreading $playdev listpos 1");
    }
    mpg123_poller($player);
   
  }elsif( $event =~ /listpos:? (\d+)/){
     
   
  #-- off-event
  }elsif( $event eq "off"){
    mpg123_off();
   
  }elsif( $event eq "nextTrack"){
    mpg123_forward();
   
  }elsif( $event eq "prevTrack"){
    mpg123_back();
   
  }elsif( $event =~ /volume:? (\d+)/ ){
    alsa_setvolume($1);
  }
  return undef;
}

#############################################################################
#
#  mpg123 routines
#
#############################################################################

sub mpg123_off(){
  #-- check if playdev is SoundLinux.DG or RpiAudio.Meson
  my $playdev = "SoundLinux.DG";
  my $hash = $defs{$playdev};
  my $player = $hash->{helper}{player};
  return
    if( !defined($player));
 
  $player->stop_mpg123();
  fhem("setstate $playdev off");
  fhem("setreading $playdev track -");
  fhem("setreading $playdev artist -");
  fhem("setreading $playdev playinfo stopped");
  fhem("setreading $playdev playinfo2 stopped");
  $hash->{helper}{player} = undef;
}

sub mpg123_forward(){
  #-- check if playdev is SoundLinux.DG or RpiAudio.Meson
  my $playdev = "SoundLinux.DG";
  my $hash = $defs{$playdev};
  my $player = $hash->{helper}{player};
  return
    if( !defined($player));
   
  my $isList = ReadingsVal($playdev,"listsrc",0);
  my $listl  = ReadingsVal($playdev,"listlen",1);
  my $listp  = ReadingsVal($playdev,"listpos",1);
  my $listf  = ReadingsVal($playdev,"listfil","");
  $listp++;
  if( $listp <= $listl ){
    $player->loadlist($listp,$listf);
    #Log 1,"====> Loadlist $listp file $listf called";
    fhem("setreading $playdev listpos $listp");
    fhem("setreading $playdev listwait 1");
    InternalTimer(time()+2, "mpg123_poller", $player,0);
  }else{
    mpg123_off();
  }
}

sub mpg123_back(){
  #-- check if playdev is SoundLinux.DG or RpiAudio.Meson
  my $playdev = "SoundLinux.DG";
  my $hash = $defs{$playdev};
  my $player = $hash->{helper}{player};
  return
    if( !defined($player));
   
  my $isList = ReadingsVal($playdev,"listsrc",0);
  my $listl  = ReadingsVal($playdev,"listlen",1);
  my $listp  = ReadingsVal($playdev,"listpos",1);
  my $listf  = ReadingsVal($playdev,"listfil","");
  $listp--;
  if( $listp > 0){
    $player->loadlist($listp,$listf);
    fhem("setreading $playdev listpos $listp");
    fhem("setreading $playdev listwait 1");
    InternalTimer(time()+2, "mpg123_poller", $player,0);
  }else{
    mpg123_off();
  }
}
 
sub mpg123_poller($){
  my ($self) = @_;
  #-- check if playdev is SoundLinux.DG or RpiAudio.Meson
  my $playdev = "SoundLinux.DG";
  my $hash = $defs{$playdev};
  my $player = $hash->{helper}{player};
 
  if( !defined($player)){
    Log 1,"[mpg123_poller] no player found";
    return
  #}elsif( !defined($player->{state})){
  #  Log 1,"[mpg123_poller] no player->{state} found";
  #  print {$player->{w}} "Q\n";
  #  return
  }
   
  my $isList = ReadingsVal($playdev,"listsrc",0);
  my $listl  = ReadingsVal($playdev,"listlen",1);
  my $listp  = ReadingsVal($playdev,"listpos",1);
  my $listf  = ReadingsVal($playdev,"listfil","");
  my $listw  = ReadingsVal($playdev,"listwait",0);
 
  #-- we are playing
  if( $player->{state} ne "0" ){
    $player->poll(1);
    InternalTimer(time()+2, "mpg123_poller", $player,0);
    my $trk = $player->title;
    my $art = $player->artist;
    my ($ret94,$ret90);
    if( ReadingsVal($playdev,"origin","") !~ /SWR/ ){
      $ret94 = "playing <i>".$trk."</i><br>by <i>".$art."</i>";
      $ret90  = "<i>".$trk."</i><br>von <i>".$art."</i>";
    }else{
      $ret94 = "playing <i>SWR3</i><br>";
      $ret90  = "<i>SWR3</i>";
    }
    #-- get count of current playlist
    $listl = $player->{listl};
    readingsBeginUpdate($hash);
    readingsBulkUpdateIfChanged($hash, "playinfo", $ret94);
    readingsBulkUpdateIfChanged($hash, "playinfo2", $ret90);
    readingsBulkUpdateIfChanged($hash, "track", $trk);
    readingsBulkUpdateIfChanged($hash, "artist", $art);
    readingsBulkUpdateIfChanged($hash, "listlen", $listl);
    readingsBulkUpdateIfChanged($hash, "listwait", 0);
    readingsEndUpdate($hash,1);
   
  #-- we are not playing, and are not waiting for a listentry to come up
  }elsif( $player->{state} eq "0" && $listw == 0){
    #-- list is not finished => next entry
    if( $listp < $listl ){
      $listp++;
      $player->loadlist($listp,$listf);
      fhem("setreading $playdev listpos $listp");
      fhem("setreading $playdev listwait 1");
      #Log 1,"++++++> State = 0 => starting track $listp on list $listf";
      InternalTimer(time()+2, "mpg123_poller", $player,0);
    #-- list is finished => end player
    }else{
      mpg123_off();
    }
  #-- state is unclear, just poll another time 
  }else{
    $player->poll(1);
    InternalTimer(time()+2, "mpg123_poller", $player,0);
  } 
  return undef;
}

#############################################################################
#
#  ALSA volume routines (for USB sound card)
#
#############################################################################

sub alsa_getvolume {
  my $vl=Audio::Alsa::Mixer->device('USB-Audio')->control('Speaker')->channel('Front Left')->volume_out('%');
  my $vr=Audio::Alsa::Mixer->device('USB-Audio')->control('Speaker')->channel('Front Right')->volume_out('%');
  return ($vl+$vr)/2;
}

sub alsa_setvolume {
  my ($volnew) = @_;
  Audio::Alsa::Mixer->device('USB-Audio')->control('Speaker')->channel('Front Left')->volume_out($volnew."%");
  Audio::Alsa::Mixer->device('USB-Audio')->control('Speaker')->channel('Front Right')->volume_out($volnew."%");
}


und zwei spezialisierte Audiomodule. Die habe ich von älteren Codebeispielen her adaptiert - bei einem weiß ich noch nicht mal, wer das ursprünglich gebaut hat. mpg123 kann man damit problemlos stoppen und starten.

Sind hier angehängt

LG

pah

Prima, dass meine alten Hacks immer noch verwendet werden - 099_Selbstzerstoerung, ich lach mir nen Ast...

PSI69

Hi pah!

Danke für die Module und den Code...

... und ja, Dein AAA Modul und natürlich die 099_Selbstzerstoerung (inzwischen etwas modifiziert / verlängert) sind seit 2016 (denke ich jedenfalls) noch immer im Einsatz und freuen sich großer Beliebtheit :)

Gruß Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

Tobias

Hi,
Ein TTS stop hatte ich nie auf dem Schirm und deshalb auch nicht eingebaut.
Der gesamte TTS String wird dem mplayer übergeben. Ich weiß so adhoc nicht, ob der Mplayer auch einen eingebauten Befehl zum stop hat, ich gehe aber mal davon aus. Dementsprechend müsste der Systemcall einfach nur aufgerufen werden.

Ich bin gerade in meinem SolarModul MQTT gateway gefangen, nehme aber gerne pullrequest an :)
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

PSI69

Der Vorschlag von Otto mit dem pkill läuft aktuell super bei mir.
Peter
FHEM auf RPi 5 unter Bookworm mit inzwischen einem ganzen Zoo von Geräten...

stefan-dd

Ich habe ein Problem mit der Zeit Verzögerung, was ich nicht gelöst bekomme.
In der log sehe ich nur die Verzögerung, aber nicht warum. Ich habe alle möglichen Einstellungen probiert, entweder geht es gar nicht mehr, oder 30s und mehr verzögert.
Gibt es noch einen Tipp wie man dieses Problem lösen kann.
Fhem läuft auf einem aktuellen Debian System mit USB Sound.

2023.02.27 16:13:13 4: MyTTS: ermittelte CodePage: ascii , konvertiere nach UTF-8
2023.02.27 16:13:13 4: MyTTS: MaxChar = 200, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2023.02.27 16:13:13 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2023.02.27 16:13:13 4: MyTTS: 0 => test
2023.02.27 16:13:45 4: MyTTS: Verwende TTS Spracheinstellung: Deutsch
2023.02.27 16:13:45 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
2023.02.27 16:13:45 4: MyTTS: Bearbeite per MP3Wrap jetzt den Text: test
2023.02.27 16:13:45 4: MyTTS: cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3 hat eine Länge von 1 Sekunden.
2023.02.27 16:13:45 4: MyTTS: sudo /usr/bin/mplayer -ao alsa:device=hw=1.0  -nolirc -noconsolecontrols -softvol -softvol-max 800 -volume 100 cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
2023.02.27 16:13:45 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:duration Val:1
2023.02.27 16:13:45 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:endTime Val:00:00:00
MPlayer 1.4 (Debian), built with gcc-10 (C) 2000-2019 MPlayer Team
Terminal type `unknown' is not defined.

Playing cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3.
libavformat version 58.45.100 (external)
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 (unknown) of 1.0 (01.0) ??,?%                                         
A:   0.0 (00.0) of 1.0 (01.0)  0.3%                                             
A:   0.0 (00.0) of 1.0 (01.0)  0.3%                                             
A:   0.1 (00.0) of 1.0 (01.0)  0.4%                                             
A:   0.1 (00.0) of 1.0 (01.0)  0.4%                                             
A:   0.1 (00.1) of 1.0 (01.0)  0.4%                                             
A:   0.1 (00.1) of 1.0 (01.0)  0.4%                                             
A:   0.2 (00.1) of 1.0 (01.0)  0.4%                                             
A:   0.2 (00.2) of 1.0 (01.0)  0.4%                                             
A:   0.2 (00.2) of 1.0 (01.0)  0.4%                                             
A:   0.3 (00.2) of 1.0 (01.0)  0.4%                                             
A:   0.3 (00.2) of 1.0 (01.0)  0.4%                                             
A:   0.3 (00.3) of 1.0 (01.0)  0.4%                                             
A:   0.4 (00.3) of 1.0 (01.0)  0.4%                                             
A:   0.4 (00.3) of 1.0 (01.0)  0.4%                                             
A:   0.4 (00.4) of 1.0 (01.0)  0.4%                                             
A:   0.4 (00.4) of 1.0 (01.0)  0.4%                                             
A:   0.5 (00.4) of 1.0 (01.0)  0.5%                                             
A:   0.5 (00.4) of 1.0 (01.0)  0.4%                                             
A:   0.5 (00.5) of 1.0 (01.0)  0.5%                                             
A:   0.6 (00.5) of 1.0 (01.0)  0.5%                                             
A:   0.6 (00.5) of 1.0 (01.0)  0.5%                                             
A:   0.6 (00.6) of 1.0 (01.0)  0.5%                                             


Exiting... (End of file)
2023.02.27 16:13:46 4: MyTTS: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.


defmod MyTTS Text2Speech hw=1.0
attr MyTTS TTS_FileTemplateDir audio
attr MyTTS TTS_Language Deutsch
attr MyTTS TTS_UseMP3Wrap 1
attr MyTTS TTS_VolumeAdjust 800
attr MyTTS verbose 5

setstate MyTTS 2023-02-27 16:17:12 duration 1
setstate MyTTS 2023-02-27 16:17:12 endTime 00:00:00
setstate MyTTS 2023-02-27 16:17:14 lastFilename cache/0bcffcb06e7ae232cc9e789d12f0ac7a.mp3
setstate MyTTS 2023-02-27 16:17:14 playing 0
setstate MyTTS 2023-02-26 13:02:10 volume 100