Zurück zur Startseite

TTS auf Repka-Pi: eSpeak NG und Piper

Der Artikel beschreibt die TTS-Implementierung auf Repka-Pi 4 mit eSpeak NG und Piper TTS. Installationsanweisungen, CLI/Python-Integration und FastAPI-Server mit Warteschlange werden bereitgestellt. Geeignet für IoT und Sprachassistenten.

Piper TTS Sprachsynthese auf Repka-Pi 4
Advertisement 728x90

Sprachsynthese auf Mikrocomputern: Von eSpeak NG zu Piper TTS

Sprachsynthese hat sich von mechanischen Geräten zu neuronalen Netzwerken entwickelt. Ende des 18. Jahrhunderts simulierte man mit mechanischen Kehlkopfanaloga aus Membranen und Blasen die Stimmtöne – exemplarisch dafür steht die Euphonia aus dem Jahr 1846 mit Tasten und akustischen Komponenten.

Das elektronische Zeitalter begann mit dem Voder von Bell Labs (1930), bei dem Tonquellen, Rauschquellen und Filter über eine Tastatur gesteuert wurden. Pattern Playback (1940er–1950er Jahre) reproduzierte Spektrogramme. 1961 modellierte IBM 704 einen Kehlkopf, um "Daisy Bell" zu singen. Japans erste formantenbasierte Sprachsynthese entstand 1968. MUSA (1975–1978) lieferte Echtzeit-Italienisch.

Ab den 1980er Jahren: Formant-Synthese mit Phonemen. Ab den 1990er Jahren: statistische Methoden. Ab den 2010er Jahren: End-to-End-Neuralnetze wie VITS.

Google AdInline article slot

Leichte eSpeak NG Sprachsynthese

eSpeak NG ist eine Open-Source-Formant-Sprachsynthese ohne echte Stimmaufnahmen. Der Output klingt roboterhaft, verbraucht aber minimal Ressourcen – ideal für Repka-Pi 4 mit 2 GB RAM. Perfekt für Alarme und Prototypen.

Installation und CLI-Nutzung

Pakete aktualisieren und installieren:

apt update
apt install espeak-ng

Verfügbare Stimmen prüfen:

Google AdInline article slot
espeak-ng --voices | grep Russian

Text synthetisieren:

espeak-ng "Hello Repka Pi" -v ru

Mehrzeiligen Text per heredoc:

espeak-ng -v ru -s 150 << EOF
Hello world!
This very long text,
that takes several lines.
EOF

Aus Datei mit weiblicher Stimme:

Google AdInline article slot
espeak-ng -v ru+f5 -s 150 -f hello-repka-pi.txt

Stimmen: ru, ru+m1..m7, ru+f1..f5.

Integration mit Python

Funktion zur Ausführung über Subprozess:

import subprocess

def say(text, voice="ru", speed=150, pitch=50):
    """
    voice — Sprache/Stimme (ru, en, de).
    speed — 80–200.
    pitch — 0–99.
    """
    try:
        subprocess.run([
            "espeak-ng",
            "-v", voice,
            "-s", str(speed),
            "-p", str(pitch),
            text
        ], check=True, capture_output=True)
    except FileNotFoundError:
        print("espeak-ng nicht gefunden. Installieren: sudo apt install espeak-ng")
    except subprocess.CalledProcessError as e:
        print("Fehler:", e.stderr.decode())

if __name__ == "__main__":
    say("Hello! This test of a Russian voice.", voice="ru", speed=140)
    say("Hello, this is a test in English", voice="en-us", speed=160, pitch=60)
    say("Testing another Russian voice", voice="ru+f3", speed=135)

Ausführen mit: python3 espeak-ng-test.py.

Neuronale Netzwerk-basierte Piper TTS

Piper TTS nutzt VITS (Variational Inference with adversarial learning for end-to-end TTS) und ONNX-Modelle, um natürliche, Echtzeit-Sprache auf Mikrocomputern zu erzeugen. Die Performance übertrifft eSpeak NG deutlich, mit akzeptabler Latenz sogar auf Repka-Pi 4.

Installation und Modellkonfiguration

Virtuelle Umgebung:

sudo apt update
sudo apt install python3-pip
python3 -m venv ~/piper_env
source ~/piper_env/bin/activate
pip install --upgrade pip
pip install piper-tts sounddevice numpy

Russisches Modell herunterladen (denis-medium):

mkdir -p ~/piper-voices/ru
cd ~/piper-voices/ru
wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/ru/ru_RU/denis/medium/ru_RU-denis-medium.onnx?download=true -O ru_RU-denis-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/ru/ru_RU/denis/medium/ru_RU-denis-medium.onnx.json?download=true -O ru_RU-denis-medium.onnx.json

CLI und Python-Ausführung

Synthese in WAV:

piper --model ~/piper-voices/ru/ru_RU-irina-medium.onnx --output_file großes_text.wav <<EOF
Hello world!
This very long text...
EOF
aplay großes_text.wav

Aus Datei: piper --model model.onnx --output_file output.wav -f input.txt.

Python-Integration entspricht eSpeak NG – Nutzung von piper über Subprozess oder native API.

FastAPI-TTS-Server

Erstellen eines asynchronen Servers zur Verwaltung von Anfragen. Als systemd-Dienst auf Repka-Pi 4 laufen lassen.

  • Vorteile: Clients senden HTTP-POST-Anfragen ohne Wartezeit; Server pufferiert Aufgaben.
  • Technologie: FastAPI, Piper TTS, Task-Queue.

Beispielservercode:

from fastapi import FastAPI

import queue
import threading
from piper import PiperVoice

app = FastAPI()
voice = PiperVoice.load("~/piper-voices/ru/ru_RU-denis-medium.onnx")
task_queue = queue.Queue()

def process_queue():
    while True:
        text = task_queue.get()
        wav = voice.synthesize(text)
        # Speichern oder streamen
        task_queue.task_done()

threading.Thread(target=process_queue, daemon=True).start()

@app.post("/synthesize")
async def synthesize(text: str):
    task_queue.put(text)
    return {"status": "queued"}

systemd-Einheit:

[Unit]
Description=Piper TTS Server
After=network.target

[Service]
ExecStart=/path/to/server.py
Restart=always

[Install]
WantedBy=multi-user.target

Client: curl -X POST http://repka-pi:8000/synthesize -d 'Text for synthesis'.

Wichtige Erkenntnisse

  • eSpeak NG: geringer Ressourcenverbrauch, Formant-Synthese, ideal für schwache Hardware.
  • Piper TTS: VITS/ONNX für natürliche Sprache, Echtzeit auf SBCs.
  • FastAPI-Server: asynchrone Warteschlange, automatischer Start via systemd.
  • Einsatzfälle: Sprachassistenten, IoT, Roboter auf Repka-Pi 4/5.
  • Repka-Pi 5: bis zu 32 GB RAM, doppelt so leistungsfähig wie Raspberry Pi 5 für TTS+ASR.

— Editorial Team

Advertisement 728x90

Weiterlesen