Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Offline Sprachausgabe in hoher Qualität

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    706

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Offline Sprachausgabe in hoher Qualität

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
19 Beiträge 9 Kommentatoren 2.5k Aufrufe 12 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • uweklattU uweklatt

    Lokaler Text2Speak (TTS) Server

    Ich beschreibe hier meine Vorgehensweise zur Einrichtung eines im lokalen Netzwerk befindlichen TTS-Servers. Dieser kann zum Erstellen von WAV-Sounddateien genutzt werden. Als Eingabe dient der gewünschte Text, den man über eine Webschnittstelle an diesen Server sendet und dann die WAV-Datei anschließend von diesem herunterladen und weiter verwenden kann.

    Es gibt diverse Stimmen in vielen Sprachen: https://github.com/rhasspy/piper/blob/master/VOICES.md

    Verwendete Softwarekomponenten:

    • Debian oder Devuan Linux (minimale Serverversion genügt)
    • Webserver mit PHP-CGI (lighttpd)
    • Python3 mit PIP
    • piper (AI-Sprachgenerierung) => https://github.com/rhasspy/piper

    Ich habe einen „neuen“ virtuellen Proxmox Server genutzt. Man kann aber auch einen RasPi oder einen anderen Linuxserver verwenden. Dann muss die Installation der einzelnen Softwarekomponenten evtl. angepasst werden. Ich haben Devuan 4 als Basis verwendet. https://www.devuan.org/

    Bei Debian/Deuvan basierten Linuxsystemen wird apt zur Softwareverwaltung verwendet.
    Das wird auch bei dieser Anleitung verwendet.

    Die folgenden Schritte habe ich als root-User durchgeführt:

    Installation des Devuan-Linux bzw. Nutzung eines vorhandenen Linux.
    Anschließend Update der aktuellen Software:

    apt update
    apt upgrade

    Installation von python und pip:

    apt install python3 pip

    Installation von piper:

    pip install piper-tts

    Test der piper Installation: (Optional)

    echo 'Willkommen!' | piper --model de_DE-thorsten-high --output_file welcome.wav

    Diese WAV-Datei sollte sich mit einem Player abspielen lassen.
    Beim ersten Aufruf von „piper“ wird die benutzte Stimme (hier de_DE_thorsten-high) heruntergeladen und im aktuellen Verzeichnis gespeichert. Die generierte WAV-Datei landet ebenfalls im aktuellen Verzeichnis.

    Installation des Webservers mit php-cgi:

    apt install lighttpd php-cgi

    Aktivierung von PHP fastcgi:

    ln -s /etc/lighttpd/conf-available/10-fastcgi.conf /etc/lighttpd/conf-enabled/10-fastcgi.conf
    ln -s /etc/lighttpd/conf-available/15-fastcgi-php.conf /etc/lighttpd/conf-enabled/15-fastcgi-php.conf

    Neustart des Webservers:

    /etc/init.d/lighttpd restart

    Damit die heruntergeladene Stimme und die WAV-Datei im WEB-Verzeichnis /var/www/html erstellt werden können, bekommt dieses Verzeichnis Schreibrechte für alle User! Das sollte man bei einem öffentlich erreichbaren Server so nicht tun!

    chmod 777 /var/www/html

    Im Webverzeichnis /var/www/html wird nun eine kleine PHP-Datei index.php erstellt, die zum Empfang des zu erstellenden Textes dient. Sie ruft dann piper mit den erforderlichen Parametern auf.

    /var/www/html/index.php:

    <?php
      $text = htmlspecialchars_decode($_GET['text']); 
      $text2 = escapeshellarg($text);
      exec("/bin/echo '".$text2."' | /usr/local/bin/piper --model de_DE-thorsten-high --output_file tts.wav");
    ?>
    

    Nun kann durch den Aufruf des Servers mit Übergabe des Textes eine entsprechende WAV-Datei erstellt werden:
    http://server-ip?text=Willkommen

    Die WAV-Datei kann anschliessend heruntergeladen werden:
    http://server-ip/tts.wav

    Im ioBroker nutze ich den Server per JavaScript mit dem Chromecast Adapter.
    Der gewünschte Text wird mit dem httpGet() Befehl zum Server übertragen und anschließend die URL der WAV-Datei im Chromecast Adapter im Objekt chromecast.0.Google_Home.player.url2play eingetragen und abgespielt.
    Damit das sauber funktioniert, musste ich nach dem Generieren der WAV-Datei eine kleine Pause (1 sec) einfügen, bevor die URL zum Chromecast gesandt wird.
    Der Code sieht wie folgt aus:

    function talk(text)
    {
        setState('chromecast.0.Google_Home.player.volume', 30);
        setState('chromecast.0.Google_Home.player.announcement', "http://ioBroker-ip:8082/sayit.0/tts.userfiles/mp3_silence_1sec.mp3");
        httpGet("http://server-ip/?text="+text, function() 
        {
            setTimeout(function()
            { 
                setState('chromecast.0.Google_Home.player.url2play', 'http://server-ip/tts.wav'); 
            }, 1000);  
        });
    }
    

    Eine Demo für den Webbrowser liefert diese HTML-Datei. Sie bietet neben der Eingabemöglichkeit des Textes auch einen Player zum direkten Abspielen im Browser.

    <!doctype html>
    <head>
    <meta charset=utf-8>
    <title>TTS-Demo</title>
    </head>
    <body>
      <?php
        $text = htmlspecialchars_decode($_GET['text']); 
        $text2 = escapeshellarg($text);
        exec("/bin/echo '".$text2."' | /usr/local/bin/piper --model de_DE-thorsten-high --output_file play.wav");
      ?>
      <form action="/play.php">
        <input type="text" name="text" value="<?php echo $text;?>">
        <input type="submit" value="Generate">
      </form> 
      <audio id="audio" controls src="/play.wav"></audio><br>
      <a href="/play.wav">Download WAV</a>
      <script type="text/javascript">
        document.getElementById('audio').addEventListener("ended",function() {
            this.src = "/play.wav.php?nocache="+new Date().getTime();
            this.play();
        });
      </script>
    </body>
    </html>
    

    Evtl. ist das alles für den Einen oder Anderen nützlich.

    Tschau
    Uwe

    haselchenH Offline
    haselchenH Offline
    haselchen
    Most Active
    schrieb am zuletzt editiert von
    #4

    @uweklatt

    Hey...

    erstmal Hut ab für die Anleitung. Super gemacht.
    Kannst Du vielleicht ein paar Anwendungsfälle geben?

    Vielleicht habe ich auch nicht richtig um die Ecke gedacht.
    Text und MP3 kann ich ja auch so auf dem Google z.b. ausgeben lassen.
    Dazu muss natürlich die ganze Maschinerie laufen, aber das muss Dein Server ja dann auch.....

    Synology DS218+ & 2 x Fujitsu Esprimo (VM/Container) + FritzBox7590 + 2 AVM 3000 Repeater & Homematic & HUE & Osram & Xiaomi, NPM 10.9.4, Nodejs 22.21.0 ,JS Controller 7.0.7 ,Admin 7.7.19

    uweklattU 1 Antwort Letzte Antwort
    0
    • haselchenH haselchen

      @uweklatt

      Hey...

      erstmal Hut ab für die Anleitung. Super gemacht.
      Kannst Du vielleicht ein paar Anwendungsfälle geben?

      Vielleicht habe ich auch nicht richtig um die Ecke gedacht.
      Text und MP3 kann ich ja auch so auf dem Google z.b. ausgeben lassen.
      Dazu muss natürlich die ganze Maschinerie laufen, aber das muss Dein Server ja dann auch.....

      uweklattU Offline
      uweklattU Offline
      uweklatt
      schrieb am zuletzt editiert von
      #5

      @haselchen sagte in Offline Sprachausgabe in hoher Qualität:

      Kannst Du vielleicht ein paar Anwendungsfälle geben?
      Text und MP3 kann ich ja auch so auf dem Google z.b. ausgeben lassen.

      Die Hauptmotivation war, ohne die Cloud auszukommen.
      Die gesamte Sprachgenerierung erfolgt offline, also ohne Cloud. Und das Ergebnis ist deutlich besser, als andere lokale Sprachgeneratoren.

      Durch die Implementierung in Verbindung mit einem Webserver kann man die Spracherzeugung leicht in viele Tools und Projekte integrieren.

      Längerfristig möchte ich auch die Spracheingabe lokal erledigen. :blush:

      Tschau
      Uwe

      P.S: Hier das Ergebnis des Textes "Peiper funktioniert prima im lokalen Netzwerk": play.mp3

      Proxmox/LXC/Docker

      1 Antwort Letzte Antwort
      0
      • uweklattU uweklatt

        Hallo,

        ich war auf der Suche nach einer offline Sprachausgabe, die als Ersatz für SayIt dienen kann und eine gute Sprachqualität besitzt.

        Als Ergebnis habe ich das Projekt piper verwendet und dieses auf einem virtuellen Linux Server installiert.
        Dort läuft auch ein Webserver, der die generierten Sprachausgaben zur Nutzung/Download bereitstellt.
        Die gewünschten Texte werden über eine HTTP Webanfrage dorthin übermittelt.

        Falls Interesse besteht, kann ich die Schritte zur Umsetzung hier zeigen.

        Tschau
        Uwe

        liv-in-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        schrieb am zuletzt editiert von
        #6

        @uweklatt

        wo findet letztlich die ausgabe statt ?

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        uweklattU 1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          @uweklatt

          wo findet letztlich die ausgabe statt ?

          uweklattU Offline
          uweklattU Offline
          uweklatt
          schrieb am zuletzt editiert von
          #7

          @liv-in-sky sagte in Offline Sprachausgabe in hoher Qualität:

          wo findet letztlich die ausgabe statt ?

          In meinem Fall auf einem Google Home mini (mit dem Chromecast Adapter).
          Man kann die WAV-Datei aber auch mit einem anderen Netzwerkplayer ausgeben.

          Tschau
          Uwe

          Proxmox/LXC/Docker

          liv-in-skyL 1 Antwort Letzte Antwort
          0
          • uweklattU uweklatt

            @liv-in-sky sagte in Offline Sprachausgabe in hoher Qualität:

            wo findet letztlich die ausgabe statt ?

            In meinem Fall auf einem Google Home mini (mit dem Chromecast Adapter).
            Man kann die WAV-Datei aber auch mit einem anderen Netzwerkplayer ausgeben.

            Tschau
            Uwe

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von
            #8

            @uweklatt

            also braucht man natürlich eine alexa oder google box

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            uweklattU 1 Antwort Letzte Antwort
            0
            • liv-in-skyL liv-in-sky

              @uweklatt

              also braucht man natürlich eine alexa oder google box

              uweklattU Offline
              uweklattU Offline
              uweklatt
              schrieb am zuletzt editiert von uweklatt
              #9

              @liv-in-sky sagte in Offline Sprachausgabe in hoher Qualität:

              also braucht man natürlich eine alexa oder google box

              Nein, jedes "Gerät", das WAV-Dateien im lokalen Netzwerk abspielen kann, kann für die Ausgabe verwendet werden. (z.B. auch ein RasPi).

              Im Prinzp kann der TTS Server auch selbst die Ausgabe übernehmen, wenn er einen Audioausgang hat. Dann kann die WAV-Datei mit z.B.

              aplay /var/www/html/tts.wav

              direkt ausgegeben werden. Noch eleganter ist es, die Ausgabe von Piper direkt als Stream in das Audiodevice zu leiten. Piper kann auch direkt Audiodaten als RAW Stream generieren...

              Tschau
              Uwe

              Proxmox/LXC/Docker

              J 1 Antwort Letzte Antwort
              1
              • uweklattU uweklatt

                @liv-in-sky sagte in Offline Sprachausgabe in hoher Qualität:

                also braucht man natürlich eine alexa oder google box

                Nein, jedes "Gerät", das WAV-Dateien im lokalen Netzwerk abspielen kann, kann für die Ausgabe verwendet werden. (z.B. auch ein RasPi).

                Im Prinzp kann der TTS Server auch selbst die Ausgabe übernehmen, wenn er einen Audioausgang hat. Dann kann die WAV-Datei mit z.B.

                aplay /var/www/html/tts.wav

                direkt ausgegeben werden. Noch eleganter ist es, die Ausgabe von Piper direkt als Stream in das Audiodevice zu leiten. Piper kann auch direkt Audiodaten als RAW Stream generieren...

                Tschau
                Uwe

                J Offline
                J Offline
                jwerlsdf
                schrieb am zuletzt editiert von jwerlsdf
                #10

                @uweklatt
                Vielen Dank für die Anleitung. Ich habe noch zwei/drei Fragen:

                1. Gibt es eine Möglichkeit , anstatt Thorsten eine weibliche Frsuenstimme zu installieren? Wie sähe dies aus?
                2. Gibt es die Möglichkeit anstatt wav eine mp3 zu erzeugen?
                3. Anstatt chromecast könnte ich ja die Datei such über sonos abspielen?!

                Beste Grüße

                uweklattU 1 Antwort Letzte Antwort
                0
                • J jwerlsdf

                  @uweklatt
                  Vielen Dank für die Anleitung. Ich habe noch zwei/drei Fragen:

                  1. Gibt es eine Möglichkeit , anstatt Thorsten eine weibliche Frsuenstimme zu installieren? Wie sähe dies aus?
                  2. Gibt es die Möglichkeit anstatt wav eine mp3 zu erzeugen?
                  3. Anstatt chromecast könnte ich ja die Datei such über sonos abspielen?!

                  Beste Grüße

                  uweklattU Offline
                  uweklattU Offline
                  uweklatt
                  schrieb am zuletzt editiert von uweklatt
                  #11

                  @jwerlsdf
                  Es gibt auch deutsche Frauenstimmen. Die Namen sind oben verlinkt.
                  Man muss dazu den Namen der Stimme in der PHP Datei austauschen.
                  In der verfügbaren Qualität "low" klingen die aber nicht so gut wie Thorsten "high".

                  Ein MP3 erfordert noch einen weiteren Konvertierungsschritt, z.B. mit ffmpeg.
                  Auch das kann man in das PHP Script integrieren.

                  Wenn man dem Sonos eine Datei zum Abspielen übermitteln kann, geht das.
                  Leider kenne ich die Sonos Geräte zu wenig, um das konkret zu beantworten.

                  Tschau
                  Uwe

                  Proxmox/LXC/Docker

                  Rene55R S 2 Antworten Letzte Antwort
                  0
                  • uweklattU uweklatt

                    @jwerlsdf
                    Es gibt auch deutsche Frauenstimmen. Die Namen sind oben verlinkt.
                    Man muss dazu den Namen der Stimme in der PHP Datei austauschen.
                    In der verfügbaren Qualität "low" klingen die aber nicht so gut wie Thorsten "high".

                    Ein MP3 erfordert noch einen weiteren Konvertierungsschritt, z.B. mit ffmpeg.
                    Auch das kann man in das PHP Script integrieren.

                    Wenn man dem Sonos eine Datei zum Abspielen übermitteln kann, geht das.
                    Leider kenne ich die Sonos Geräte zu wenig, um das konkret zu beantworten.

                    Tschau
                    Uwe

                    Rene55R Online
                    Rene55R Online
                    Rene55
                    schrieb am zuletzt editiert von
                    #12

                    @uweklatt Ich geb mich die Tage auch mal dadran - ich hab den Sayit nie ans laufen bekommen (oder falsch verstanden). :+1:

                    Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                    ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                    Wetterstation: Froggit WH3000SE V1.6.6

                    uweklattU 1 Antwort Letzte Antwort
                    0
                    • Rene55R Rene55

                      @uweklatt Ich geb mich die Tage auch mal dadran - ich hab den Sayit nie ans laufen bekommen (oder falsch verstanden). :+1:

                      uweklattU Offline
                      uweklattU Offline
                      uweklatt
                      schrieb am zuletzt editiert von
                      #13

                      @rene55
                      Du hast ja auch Proxmox am laufen. Mein Setup läuft ebenfalls als Proxmox LXC mit dem Devuan 4 Image.

                      Tschau
                      Uwe

                      Proxmox/LXC/Docker

                      1 Antwort Letzte Antwort
                      0
                      • uweklattU uweklatt

                        @jwerlsdf
                        Es gibt auch deutsche Frauenstimmen. Die Namen sind oben verlinkt.
                        Man muss dazu den Namen der Stimme in der PHP Datei austauschen.
                        In der verfügbaren Qualität "low" klingen die aber nicht so gut wie Thorsten "high".

                        Ein MP3 erfordert noch einen weiteren Konvertierungsschritt, z.B. mit ffmpeg.
                        Auch das kann man in das PHP Script integrieren.

                        Wenn man dem Sonos eine Datei zum Abspielen übermitteln kann, geht das.
                        Leider kenne ich die Sonos Geräte zu wenig, um das konkret zu beantworten.

                        Tschau
                        Uwe

                        S Abwesend
                        S Abwesend
                        Shadowhunter23
                        schrieb am zuletzt editiert von
                        #14

                        @uweklatt sagte in Offline Sprachausgabe in hoher Qualität:

                        In der verfügbaren Qualität "low" klingen die aber nicht so gut wie Thorsten "high".

                        Warum gibt es nur Thorsten als "high" Version?

                        Proxmox 9 HA-Cluster mit 3x HP prodesk 400 G6 i5
                        Bei einem downvote bitte melden, es könnte sein, dass dieser ungewollt ist!

                        uweklattU Thorsten-VoiceT 2 Antworten Letzte Antwort
                        0
                        • S Shadowhunter23

                          @uweklatt sagte in Offline Sprachausgabe in hoher Qualität:

                          In der verfügbaren Qualität "low" klingen die aber nicht so gut wie Thorsten "high".

                          Warum gibt es nur Thorsten als "high" Version?

                          uweklattU Offline
                          uweklattU Offline
                          uweklatt
                          schrieb am zuletzt editiert von
                          #15

                          @shadowhunter23
                          Keine Ahnung.

                          Proxmox/LXC/Docker

                          1 Antwort Letzte Antwort
                          0
                          • S Shadowhunter23

                            @uweklatt sagte in Offline Sprachausgabe in hoher Qualität:

                            In der verfügbaren Qualität "low" klingen die aber nicht so gut wie Thorsten "high".

                            Warum gibt es nur Thorsten als "high" Version?

                            Thorsten-VoiceT Offline
                            Thorsten-VoiceT Offline
                            Thorsten-Voice
                            schrieb am zuletzt editiert von
                            #16

                            Guude :wave: !
                            Bin durch @uweklatt auf diesen Thread aufmerksam geworden und habe mich auch gerade erst hier registriert. Sehr schöne Anleitung übrigens :+1: .

                            Mein Name ist Thorsten, Gründer von Thorsten-Voice und zugehöriger Stimmspender.

                            @Shadowhunter23 : Meine Stimme ist generell auch in der Qualitätsstufen "low" und "medium", sowie in div. Emotionen verfügbar. Woran hängt es denn?

                            Viele Grüße
                            Thorsten

                            Open voice tech tutorials on Youtube "Thorsten-Voice"

                            uweklattU 1 Antwort Letzte Antwort
                            0
                            • Thorsten-VoiceT Thorsten-Voice

                              Guude :wave: !
                              Bin durch @uweklatt auf diesen Thread aufmerksam geworden und habe mich auch gerade erst hier registriert. Sehr schöne Anleitung übrigens :+1: .

                              Mein Name ist Thorsten, Gründer von Thorsten-Voice und zugehöriger Stimmspender.

                              @Shadowhunter23 : Meine Stimme ist generell auch in der Qualitätsstufen "low" und "medium", sowie in div. Emotionen verfügbar. Woran hängt es denn?

                              Viele Grüße
                              Thorsten

                              uweklattU Offline
                              uweklattU Offline
                              uweklatt
                              schrieb am zuletzt editiert von
                              #17

                              @thorsten-voice
                              Die Frage war eher, warum es die anderen Stimmen nicht auch in hoher Qualität gibt.

                              Tschau
                              Uwe

                              Proxmox/LXC/Docker

                              Thorsten-VoiceT 1 Antwort Letzte Antwort
                              0
                              • uweklattU uweklatt

                                @thorsten-voice
                                Die Frage war eher, warum es die anderen Stimmen nicht auch in hoher Qualität gibt.

                                Tschau
                                Uwe

                                Thorsten-VoiceT Offline
                                Thorsten-VoiceT Offline
                                Thorsten-Voice
                                schrieb am zuletzt editiert von
                                #18

                                @uweklatt Ups, ich sollte tatsächlich richtig lesen 🤦‍♂️.

                                Mike, der Entwickler von Piper hat die meisten Modelle in "medium" trainiert. Ich habe mein Thorsten Modell selber in "high" trainiert und bereitgestellt.
                                Eventuell kann man in der Piper Community anfragen, ob er ein anderes deutschsprachiges Modell auch noch in "high" trainieren kann.

                                Open voice tech tutorials on Youtube "Thorsten-Voice"

                                1 Antwort Letzte Antwort
                                0
                                • uweklattU uweklatt

                                  Lokaler Text2Speak (TTS) Server

                                  Ich beschreibe hier meine Vorgehensweise zur Einrichtung eines im lokalen Netzwerk befindlichen TTS-Servers. Dieser kann zum Erstellen von WAV-Sounddateien genutzt werden. Als Eingabe dient der gewünschte Text, den man über eine Webschnittstelle an diesen Server sendet und dann die WAV-Datei anschließend von diesem herunterladen und weiter verwenden kann.

                                  Es gibt diverse Stimmen in vielen Sprachen: https://github.com/rhasspy/piper/blob/master/VOICES.md

                                  Verwendete Softwarekomponenten:

                                  • Debian oder Devuan Linux (minimale Serverversion genügt)
                                  • Webserver mit PHP-CGI (lighttpd)
                                  • Python3 mit PIP
                                  • piper (AI-Sprachgenerierung) => https://github.com/rhasspy/piper

                                  Ich habe einen „neuen“ virtuellen Proxmox Server genutzt. Man kann aber auch einen RasPi oder einen anderen Linuxserver verwenden. Dann muss die Installation der einzelnen Softwarekomponenten evtl. angepasst werden. Ich haben Devuan 4 als Basis verwendet. https://www.devuan.org/

                                  Bei Debian/Deuvan basierten Linuxsystemen wird apt zur Softwareverwaltung verwendet.
                                  Das wird auch bei dieser Anleitung verwendet.

                                  Die folgenden Schritte habe ich als root-User durchgeführt:

                                  Installation des Devuan-Linux bzw. Nutzung eines vorhandenen Linux.
                                  Anschließend Update der aktuellen Software:

                                  apt update
                                  apt upgrade

                                  Installation von python und pip:

                                  apt install python3 pip

                                  Installation von piper:

                                  pip install piper-tts

                                  Test der piper Installation: (Optional)

                                  echo 'Willkommen!' | piper --model de_DE-thorsten-high --output_file welcome.wav

                                  Diese WAV-Datei sollte sich mit einem Player abspielen lassen.
                                  Beim ersten Aufruf von „piper“ wird die benutzte Stimme (hier de_DE_thorsten-high) heruntergeladen und im aktuellen Verzeichnis gespeichert. Die generierte WAV-Datei landet ebenfalls im aktuellen Verzeichnis.

                                  Installation des Webservers mit php-cgi:

                                  apt install lighttpd php-cgi

                                  Aktivierung von PHP fastcgi:

                                  ln -s /etc/lighttpd/conf-available/10-fastcgi.conf /etc/lighttpd/conf-enabled/10-fastcgi.conf
                                  ln -s /etc/lighttpd/conf-available/15-fastcgi-php.conf /etc/lighttpd/conf-enabled/15-fastcgi-php.conf

                                  Neustart des Webservers:

                                  /etc/init.d/lighttpd restart

                                  Damit die heruntergeladene Stimme und die WAV-Datei im WEB-Verzeichnis /var/www/html erstellt werden können, bekommt dieses Verzeichnis Schreibrechte für alle User! Das sollte man bei einem öffentlich erreichbaren Server so nicht tun!

                                  chmod 777 /var/www/html

                                  Im Webverzeichnis /var/www/html wird nun eine kleine PHP-Datei index.php erstellt, die zum Empfang des zu erstellenden Textes dient. Sie ruft dann piper mit den erforderlichen Parametern auf.

                                  /var/www/html/index.php:

                                  <?php
                                    $text = htmlspecialchars_decode($_GET['text']); 
                                    $text2 = escapeshellarg($text);
                                    exec("/bin/echo '".$text2."' | /usr/local/bin/piper --model de_DE-thorsten-high --output_file tts.wav");
                                  ?>
                                  

                                  Nun kann durch den Aufruf des Servers mit Übergabe des Textes eine entsprechende WAV-Datei erstellt werden:
                                  http://server-ip?text=Willkommen

                                  Die WAV-Datei kann anschliessend heruntergeladen werden:
                                  http://server-ip/tts.wav

                                  Im ioBroker nutze ich den Server per JavaScript mit dem Chromecast Adapter.
                                  Der gewünschte Text wird mit dem httpGet() Befehl zum Server übertragen und anschließend die URL der WAV-Datei im Chromecast Adapter im Objekt chromecast.0.Google_Home.player.url2play eingetragen und abgespielt.
                                  Damit das sauber funktioniert, musste ich nach dem Generieren der WAV-Datei eine kleine Pause (1 sec) einfügen, bevor die URL zum Chromecast gesandt wird.
                                  Der Code sieht wie folgt aus:

                                  function talk(text)
                                  {
                                      setState('chromecast.0.Google_Home.player.volume', 30);
                                      setState('chromecast.0.Google_Home.player.announcement', "http://ioBroker-ip:8082/sayit.0/tts.userfiles/mp3_silence_1sec.mp3");
                                      httpGet("http://server-ip/?text="+text, function() 
                                      {
                                          setTimeout(function()
                                          { 
                                              setState('chromecast.0.Google_Home.player.url2play', 'http://server-ip/tts.wav'); 
                                          }, 1000);  
                                      });
                                  }
                                  

                                  Eine Demo für den Webbrowser liefert diese HTML-Datei. Sie bietet neben der Eingabemöglichkeit des Textes auch einen Player zum direkten Abspielen im Browser.

                                  <!doctype html>
                                  <head>
                                  <meta charset=utf-8>
                                  <title>TTS-Demo</title>
                                  </head>
                                  <body>
                                    <?php
                                      $text = htmlspecialchars_decode($_GET['text']); 
                                      $text2 = escapeshellarg($text);
                                      exec("/bin/echo '".$text2."' | /usr/local/bin/piper --model de_DE-thorsten-high --output_file play.wav");
                                    ?>
                                    <form action="/play.php">
                                      <input type="text" name="text" value="<?php echo $text;?>">
                                      <input type="submit" value="Generate">
                                    </form> 
                                    <audio id="audio" controls src="/play.wav"></audio><br>
                                    <a href="/play.wav">Download WAV</a>
                                    <script type="text/javascript">
                                      document.getElementById('audio').addEventListener("ended",function() {
                                          this.src = "/play.wav.php?nocache="+new Date().getTime();
                                          this.play();
                                      });
                                    </script>
                                  </body>
                                  </html>
                                  

                                  Evtl. ist das alles für den Einen oder Anderen nützlich.

                                  Tschau
                                  Uwe

                                  P Offline
                                  P Offline
                                  pejasus
                                  schrieb am zuletzt editiert von
                                  #19

                                  @uweklatt
                                  Danke für diese GENIALE Anleitung!, ich habe Sie auf einem Raspi4 installiert - ohne größere Probleme!

                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  380

                                  Online

                                  32.6k

                                  Benutzer

                                  82.0k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Home
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe