Jede Geschichte zum Hören: Azure Speech HD Voices
Foto: Unsplash
Vorlesen ist eine der ältesten Formen des Geschichtenerzählens. Das Hörbuch hat diesen Impuls in ein kommerzielles Format überführt — aber für Indie-Autoren war Hörbuch immer ein Luxus, weil die Produktion Zeit und Geld kostet. Man braucht ein Mikrofon, eine ruhige Umgebung, Schnittprogramme, Stunden der Nachbearbeitung.
OutaStory macht das anders: Jede Geschichte kann automatisch als Audioversion vorgelegt werden — Kapitel für Kapitel, mit Azure Speech HD Voices, die sich wie echte Sprecher anhören.
Wie der Audio-Prozess abläuft
Der Audio-Publish ist Schritt 3 im dreistufigen Publish-Wizard. Die Autorin wählt eine Stimme aus einer kurzen Vorschau-Liste, dann läuft alles asynchron ab.
Technisch gesehen passieren dabei mehrere Dinge nacheinander:
1. SSML-Generierung via GPT-5:
Der Rohtext jedes Kapitels wird an Azure OpenAI geschickt, Modell gpt-5. Der Auftrag: Wandle den Text in valides SSML (Speech Synthesis Markup Language) um. SSML erlaubt es, Pausen, Betonungen, Sprechtempo und Satzmelodie zu steuern — weit jenseits von "lies diesen Text vor."
Das Modell kennt den SSML-Standard, aber es produziert nicht immer sofort valides XML. Deshalb haben wir OutaStory.Ssml, eine eigene Bibliothek, die das generierte SSML gegen die SSML-Spezifikation validiert. Schlägt die Validierung fehl, wird die Anfrage mit einer Fehlerkorrektur-Anweisung erneut gestellt.
2. MP3-Synthese via Azure Speech: Das validierte SSML wird an Azure Speech übergeben — an die HD-Voices-Variante. HD Voices klingen nicht wie klassische Text-to-Speech-Systeme aus den Neunzigern. Sie modulieren, sie atmen, sie haben Rhythmus. Der Unterschied zu Standard-Voices ist merklich.
Die Synthese passiert Kapitel für Kapitel. Jedes Kapitel ist eine eigene MP3-Datei, die in Azure Blob Storage abgelegt wird, im audio-Container.
3. Service Bus und Reihenfolge:
Die Generierung wird über den ssmlprocessor Azure Service Bus Queue gesteuert. Wichtig: Dieser Queue ist session-enabled. Das bedeutet, Nachrichten für dasselbe Draft werden in der richtigen Reihenfolge verarbeitet — Kapitel 1 vor Kapitel 2, und so weiter. Das klingt selbstverständlich, ist aber bei verteilten Systemen nicht trivial.
Das 200.000-Zeichen-Limit
Azure Speech HD Voices haben ein Limit pro Synthesise-Anfrage. Wir haben für OutaStory ein Gesamtlimit von 200.000 Zeichen pro Geschichte eingeführt. Das entspricht ungefähr einem Roman mit 100 bis 120 Seiten — oder mehreren kürzeren Geschichten kombiniert.
200.000 Zeichen ist großzügig genug für die meisten Indie-Geschichten. Für unsere 42 Flagship-Geschichten mit je rund 14.000 Wörtern (entspricht etwa 90.000 Zeichen) ist das Limit nie erreicht.
Das Limit ist eine Sicherheitsstufe — es verhindert, dass versehentlich eine halbe Million Zeichen in den Synthesizer geschickt werden, was sowohl teuer als auch langsam wäre.
Foto: Unsplash
Was HD Voices besser macht
Ich möchte kurz erklären, warum uns Azure Speech HD Voices wichtig waren und nicht einfach Standard Text-to-Speech.
Standard TTS liest vor. HD Voices erzählen. Der Unterschied zeigt sich in:
- Satzmelodie: HD Voices heben die Stimme am Satzende einer Frage, senken sie am Ende einer Aussage — automatisch.
- Pausen: Absätze bekommen echte Atemzeichen, kein durchgehendes Drücken.
- Emotionale Tönung: Aufgeregte Szenen klingen anders als ruhige Momente, wenn das SSML das entsprechend markiert.
- Natürliche Geschwindigkeit: HD Voices variieren ihr Tempo leicht, das klingt menschlicher als gleichförmiges Lesen.
Für eine Plattform, bei der Hören gleichwertig neben Lesen steht, war das keine Frage. Es war HD oder gar nicht.
Die eigene SSML-Bibliothek: OutaStory.Ssml
Ich möchte kurz auf diese Bibliothek eingehen, weil sie einen unverhältnismäßig wichtigen Teil der Audio-Qualität sichert.
SSML ist ein W3C-Standard, aber der Standard hat Spielraum. Verschiedene Implementierungen interpretieren Kantenfälle anders. Azure Speech hat eigene Erweiterungen, die nicht Teil des Standards sind, aber gültig sind. GPT-5 kennt den Standard — aber produziert manchmal Tags, die syntaktisch falsch verschachtelt sind.
OutaStory.Ssml löst das in zwei Schritten: zuerst Schema-Validierung gegen den SSML-Standard (mit Azure-Erweiterungen), dann semantische Prüfung auf bekannte Problemmuster. Schlägt irgendetwas fehl, gibt die Bibliothek einen strukturierten Fehler zurück, der als Teil des Retry-Prompts an das LLM geschickt wird.
Das mag nach Over-Engineering klingen. In der Praxis hat es verhindert, dass beschädigte MP3-Dateien entstehen oder die Sprachsynthese mit internem Fehler abbricht.
Feature Flag: AudioGeneration
Wie die KI-Cover hat auch Audio ein Feature Flag: AudioGeneration. Auf Hosts, wo Azure Speech nicht konfiguriert ist, bleibt der Wizard-Schritt sichtbar, aber deaktiviert. Das ermöglicht lokale Entwicklung ohne echte Azure-Credentials.
Was kommt als Nächstes?
Nächste Woche: Wie Slug-basierte URLs Geschichten und Autoren linkbar und auffindbar machen — und was hinter draft-{guid} steckt, bis eine Autorin ihren eigenen Slug wählt.
