ANLEITUNG

Eine Streamlit-App für Text-to-Speech mit kostenlosen Offline-Stimmen

Streamlit macht aus einem Python-Skript eine Web-App, und mit einer Sprach-Engine im selben Prozess entsteht eine Sprach-App ohne Sprachdienst, Schlüssel oder Rechnung. Diese Anleitung baut sie in rund 35 Zeilen mit der kostenlosen SuperClonica-Engine: ein Textfeld, Stimmen- und Sprachauswahl, ein Player und ein WAV-Download.

Wir haben die App mit Streamlits eigenem AppTest-Framework getestet. Alles läuft in Ihrem Python-Prozess, die Texte verlassen also nie Ihren Rechner oder Server.

Installation

Sie brauchen Python 3.10 oder neuer. Installieren Sie beide Pakete:

pip install streamlit superclonica-cpu

Beim ersten Start lädt die Engine das Modell Supertonic 3, etwa 400 MB; danach läuft sie offline auf einem normalen Prozessor, eine NVIDIA-Grafikkarte macht sie nur schneller.

Die App

Speichern Sie das als app.py:

import io, threading, wave
import numpy as np
import streamlit as st
from superclonica import Superclonica

VOICES = ["F1", "F2", "F3", "F4", "F5", "M1", "M2", "M3", "M4", "M5"]
LANGUAGES = {"English": "en", "Español": "es", "Deutsch": "de", "Français": "fr", "Русский": "ru", "日本語": "ja"}

@st.cache_resource
def engine():
    return Superclonica(), threading.Lock()

def to_wav(audio, rate):
    pcm = (np.clip(np.asarray(audio, dtype=np.float32).reshape(-1), -1, 1) * 32767).astype(np.int16)
    buffer = io.BytesIO()
    with wave.open(buffer, "wb") as file:
        file.setnchannels(1)
        file.setsampwidth(2)
        file.setframerate(rate)
        file.writeframes(pcm.tobytes())
    return buffer.getvalue()

st.title("Text to speech")
text = st.text_area("Text", max_chars=2000)
voice = st.selectbox("Voice", VOICES)
language = st.selectbox("Language", list(LANGUAGES))

if st.button("Voice it", disabled=not text.strip()):
    tts, lock = engine()
    with st.spinner("Voicing..."), lock:
        audio, rate = tts.synthesize(text, voice=voice, lang=LANGUAGES[language])
    wav = to_wav(audio, rate)
    st.audio(wav, format="audio/wav")
    st.download_button("Download WAV", wav, file_name="speech.wav", mime="audio/wav")

Starten Sie sie und öffnen Sie die ausgegebene Adresse:

streamlit run app.py

st.cache_resource erzeugt die Engine einmal für alle Besucher statt bei jedem Neulauf, und die Sperre lässt Anfragen mehrerer Personen nacheinander laufen. Der Knopf bleibt deaktiviert, bis Text da ist, und st.download_button gibt dem Besucher dasselbe WAV.

Stimmen, Sprachen und Tempo

Die Liste enthält die zehn Standardstimmen, M1 bis M5 und F1 bis F5. Für eine Stimme aus dem SuperClonica-Katalog tragen Sie den Pfad ihrer Stimmdatei ein; hören Sie sie vorher auf ihrer Seite an, wo ein Satz von 30 bis 100 Zeichen kostenlos vertont wird. Ergänzen Sie im Wörterbuch Codes für jede der 31 unterstützten Sprachen; Chinesisch wird noch nicht unterstützt. Das Tempo lässt sich an der Engine setzen, etwa tts.speed = 1.1, von 0.7 bis 2.0.

Teilen

Streamlit Community Cloud kann die App aus einem GitHub-Repository bereitstellen: Fügen Sie eine requirements.txt mit superclonica-cpu hinzu. Halten Sie max_chars in einer öffentlichen App niedrig und bieten Sie nur Stimmen an, die Sie teilen dürfen: Die Standardstimmen sind unter der Modelllizenz frei nutzbar, gekaufte Katalogstimmen sind für Ihre eigenen Projekte. Wenn Sie das Modell gar nicht betreiben möchten, rufen Sie über denselben Knopf die SuperClonica-Sprach-API auf.