Published on

SSML i TTS - Jak stworzyć realistyczną mowę z tekstu przy pomocy AI

Authors
  • avatar
    Name
    Piotr Kołodziejczyk
    Twitter
SSML i TTS - Jak stworzyć realistyczną mowę z tekstu przy pomocy AI

Text-to-Speech (TTS) z wykorzystaniem SSML (Speech Synthesis Markup Language) to technologia AI, która pozwala przekształcać tekst w naturalnie brzmiącą mowę. Dzięki Google Cloud, Azure i Amazon Polly możesz tworzyć audiobooki, asystentów głosowych czy narracje.

Czym jest SSML?

SSML (Speech Synthesis Markup Language) to język znaczników XML, który pozwala precyzyjnie kontrolować sposób, w jaki AI wypowiada tekst. Zamiast monotonnej mowy, możesz dodać naturalność i emocje do syntezy mowy.

Kluczowe elementy SSML - wyjaśnienie

Prosody (Prozodia)

Prosody to melodia i rytm mowy. Tag <prosody> pozwala kontrolować:

  • rate - tempo mowy (np. 90% = wolniej, 110% = szybciej)
  • pitch - wysokość głosu (np. +2st = wyżej, -1st = niżej, gdzie "st" to półton)
  • volume - głośność (np. +3dB = głośniej, -2dB = ciszej)
<prosody rate="90%" pitch="-1st" volume="-2dB">
  Powolna, niska i cicha wypowiedź
</prosody>

Emfaza (Emphasis)

Emphasis to akcent i nacisk na określone słowa. Poziomy emfazy:

  • strong - silny nacisk (jak podkreślenie głosem)
  • moderate - umiarkowany akcent
  • reduced - osłabiony nacisk
<emphasis level="strong">To jest bardzo ważne!</emphasis>

Break (Pauza)

Break to celowa przerwa w mowie, która dodaje dramatyzmu lub ułatwia zrozumienie:

Pierwsza myśl.<break time="1s"/>Druga myśl po pauzie.

Praktyczny przykład z Node.js

Oto kompletny kod wykorzystujący Google Cloud Text-to-Speech API:

import fs from 'fs'
import fetch from 'node-fetch'

const apiKey = 'TWÓJ_KLUCZ_API_KTÓRY_NIE_POWINIEN_BYĆ_JAWNY_W_KODZIE' // Użyj zmiennych środowiskowych!
const text = `
<speak>
  <prosody rate="95%" pitch="+1st">
    <emphasis level="strong">Był świt.</emphasis>
    <break time="1s"/>
    Miasto jeszcze spało, ale gdzieś daleko...
    <emphasis level="moderate">coś się budziło.</emphasis>
  </prosody>

  <break time="1200ms"/>

  <prosody rate="90%" pitch="-1st">
    W cieniu wieżowców, pośród deszczu i ciszy, 
    ktoś postawił pierwszy krok.
    <break time="600ms"/>
    Wiedział, że nie ma już odwrotu.
  </prosody>

  <break time="1.3s"/>

  <prosody pitch="+3st" rate="97%" volume="+2dB">
    Głos w jego głowie szeptał:
    <break time="400ms"/>
    <emphasis level="strong">"To dopiero początek..."</emphasis>
  </prosody>

  <break time="1.5s"/>

  <prosody rate="102%" pitch="+1st" volume="+4dB">
    A potem...
    <break time="500ms"/>
    wszystko eksplodowało dźwiękiem, światłem i ruchem.
  </prosody>

  <break time="1s"/>

  <prosody rate="90%" pitch="-2st" volume="-2dB">
    I tylko on został w ciszy, słuchając echa własnych myśli.
  </prosody>

  <break time="1.2s"/>

  <prosody rate="98%" pitch="+1st" volume="+1dB">
    <emphasis level="strong">To był moment, w którym świat się przebudził.</emphasis>
  </prosody>
</speak>
`

// Główna funkcja do generowania mowy z API GCP
async function generateSpeech() {
  try {
    const response = await fetch(
      `https://texttospeech.googleapis.com/v1/text:synthesize?key=${apiKey}`,
      {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          input: { ssml: text },
          voice: {
            languageCode: 'pl-PL',
            name: 'pl-PL-Standard-B', // przykładowo
          },
          audioConfig: {
            audioEncoding: 'MP3',
            speakingRate: 1.0,
            pitch: 0.0,
          },
        }),
      }
    )

    const data = await response.json()

    if (!data.audioContent) {
      console.error('Coś poszło nie tak... ;/ ', data)
      return
    }

    // Tu zapiszemy plik jako Mp3
    const audio = Buffer.from(data.audioContent, 'base64')
    fs.writeFileSync('speech.mp3', audio)
    console.log('Plik speech.mp3 zapisany! ')
  } catch (error) {
    console.error('❌błąd:', error)
  }
}

generateSpeech()

Poniżej przykład do pobrania jak to wyszło. Oczywiście samo zarządzanie znacznikami SSML można wykorzystać lepiej

Pobierz by usłyszeć plik mp3 przygotowany przez SSML


Alternatywne platformy AI

Choć w przykładzie używamy Google Cloud Text-to-Speech, podobne możliwości oferują:

  • Microsoft Azure
  • Amazon Polly - szeroki wybór głosów i języków

Zastosowania praktyczne

SSML + TTS sprawdza się idealnie w:

  • Audiobookach - naturalna narracja z emocjami
  • Podcastach - automatyczna konwersja artykułów
  • E-learningu - interaktywne kursy online
  • Asystentach głosowych - realistyczne odpowiedzi
  • Dostępności - wsparcie dla osób niedowidzących

Podsumowanie

Technologia SSML w połączeniu z AI Text-to-Speech otwiera nowe możliwości tworzenia treści audio. Dzięki precyzyjnej kontroli nad prozodią (melodia mowy), emfazą (akcenty) i pauzami możesz generować mowę o jakości porównywalnej z profesjonalnymi lektorami.

Czy warto inwestować w TTS? Absolutnie tak - to przyszłość content marketingu i automatyzacji treści audio.