ANLEITUNG

Swift Text-to-Speech für iOS mit natürlichen Stimmen

Auf iOS beginnt Text-to-Speech mit AVSpeechSynthesizer: ein paar Zeilen Swift, und das Handy liest jeden Text mit seinen eingebauten Stimmen vor, offline und kostenlos. Diese Stimmen hängen aber davon ab, was der Nutzer installiert hat, und es sind dieselben wie in allen anderen Apps.

Die kostenlose SuperClonica-Engine gibt einer iOS- oder macOS-App eine eigene natürliche Stimme, auf zwei Wegen: vorab vertonte Audiodateien im App-Bundle oder ein Sprachserver, den die App aufruft. Dieser Leitfaden zeigt beide mit fertigem Swift-Code und sagt, wann AVSpeechSynthesizer das richtige Werkzeug bleibt.

Drei Wege, eine iOS-App sprechen zu lassen

Viele Apps kombinieren sie: eingebettete Zeilen für die Oberfläche, den Server für Nutzertext und die Systemstimme als Rückfall.

  • AVSpeechSynthesizer: die Systemstimmen, offline und kostenlos, je nachdem, was der Nutzer installiert hat.
  • Eingebettetes Audio: 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 iPhone.

Vorab vertonte Zeilen einbetten

Eingebettete Dateien laufen offline und ohne Verzögerung; eine Änderung braucht eine neue App-Version.

  • Vertonen Sie jede Zeile auf dem Mac mit der Engine: python -m pip install superclonica-cpu, dann superclonica --text "Willkommen zurück!" --voice F1 --lang de --output welcome.mp3.
  • Fügen Sie die Dateien dem Xcode-Projekt hinzu, damit sie ins App-Bundle kopiert werden.
  • Spielen Sie eine Zeile mit AVFoundation ab: player = try AVAudioPlayer(contentsOf: Bundle.main.url(forResource: "welcome", withExtension: "mp3")!); player.play()
  • Halten Sie player in einer Eigenschaft Ihrer Klasse: Ein lokaler AVAudioPlayer verstummt, sobald er freigegeben wird.

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. iOS erwartet standardmäßig HTTPS, stellen Sie ihn also hinter ein Zertifikat, und setzen Sie SUPERCLONICA_API_KEY, damit nur Ihre App ihn nutzen kann. Dann ist eine Zeile eine Anfrage: var request = URLRequest(url: URL(string: "https://tts.example.com/synthesize")!); request.httpMethod = "POST"; request.setValue("application/json", forHTTPHeaderField: "Content-Type"); request.httpBody = try JSONEncoder().encode(["text": "Ihre Bestellung ist unterwegs.", "voice": "F1", "lang": "de"]); let (data, _) = try await URLSession.shared.data(for: request); player = try AVAudioPlayer(data: data); player.play() Ergänzen Sie einen Authorization-Header mit dem Schlüssel und cachen Sie die Daten wiederkehrender Zeilen.

Wann AVSpeechSynthesizer genügt

AVSpeechSynthesizer 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 für jeden Nutzer gleich klingen muss.