Kotlin Text-to-Speech für Android mit natürlichen Stimmen
Android bringt Text-to-Speech mit: Die Klasse TextToSpeech liest jeden Text mit der auf dem Handy installierten Engine vor, offline und kostenlos. Welche Stimme der Nutzer hört, hängt von Gerät, Engine und geladenen Stimmen ab, also klingt dieselbe App auf jedem Handy anders.
Die kostenlose SuperClonica-Engine gibt einer Android-App überall dieselbe natürliche Stimme, auf zwei Wegen: vorab vertonte Audiodateien als Ressourcen oder ein Sprachserver, den die App aufruft. Dieser Leitfaden zeigt beide mit fertigem Kotlin-Code und sagt, wann die System-Engine das richtige Werkzeug bleibt.
Drei Wege, eine Android-App sprechen zu lassen
Viele Apps kombinieren sie: Ressourcen für die Oberfläche, den Server für Nutzertext und die System-Engine als Rückfall.
- TextToSpeech: die auf dem Handy installierte Engine, offline und kostenlos, mit Stimmen, die je nach Gerät wechseln.
- Raw-Ressourcen: jede feste Zeile einmal mit SuperClonica vertont und in der App ausgeliefert.
- Ein Sprachserver: Die App schickt Text an Ihren SuperClonica-Server und spielt das zurückgegebene WAV ab.
- SuperClonica spricht 31 Sprachen; Chinesisch wird noch nicht unterstützt.
Eine Stimme gratis online wählen
Geben Sie auf der Seite einer beliebigen Stimme eine Zeile Ihrer App ein, 30 bis 100 Zeichen, wählen Sie die Sprache und klicken Sie auf die Schaltfläche zum Vertonen. In wenigen Sekunden hören Sie, ob sie passt, ohne Konto, direkt auf dem Handy.
Vorab vertonte Zeilen als Ressourcen ausliefern
Ressourcen laufen offline und ohne Verzögerung; eine Änderung braucht eine neue App-Version.
- Vertonen Sie jede Zeile am Computer mit der Engine: python -m pip install superclonica-cpu, dann superclonica --text "Willkommen zurück!" --voice F1 --lang de --output welcome.mp3.
- Legen Sie die Dateien in res/raw ab; Ressourcennamen dürfen nur Kleinbuchstaben, Ziffern und Unterstriche enthalten.
- Spielen Sie eine Zeile ab: MediaPlayer.create(context, R.raw.welcome).start()
- Geben Sie den Player nach dem Abspielen frei, etwa in setOnCompletionListener.
Den eigenen Sprachserver aufrufen
Betreiben Sie den Server auf einem Rechner, den Sie kontrollieren: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Android blockiert unverschlüsseltes HTTP standardmäßig, stellen Sie ihn also hinter HTTPS, und setzen Sie SUPERCLONICA_API_KEY, damit nur Ihre App ihn nutzen kann. Mit OkHttp ist eine Zeile eine Anfrage, außerhalb des Hauptthreads, etwa in einer Coroutine auf Dispatchers.IO: val body = """{"text": "Ihre Bestellung ist unterwegs.", "voice": "F1", "lang": "de"}""".toRequestBody("application/json".toMediaType()); val bytes = client.newCall(Request.Builder().url("https://tts.example.com/synthesize").post(body).build()).execute().body!!.bytes(); val file = File(cacheDir, "line.wav").apply { writeBytes(bytes) }; MediaPlayer().apply { setDataSource(file.path); prepare(); start() } Ergänzen Sie einen Authorization-Header mit dem Schlüssel und cachen Sie die Dateien wiederkehrender Zeilen.
Wann das System-TextToSpeech genügt
Die System-Engine genügt, wenn die Stimme nur verstanden werden muss: eine Benachrichtigung vorlesen, eine Barrierefreiheitshilfe, ein Prototyp oder eine App, die ganz ohne Netz sprechen muss. Wählen Sie SuperClonica, wenn die Stimme Teil des Produkts ist: ein Sprachtutor, eine Spielfigur, eine geführte Meditation, eine Marke, die auf jedem Handy gleich klingen muss.