Sprachausgabe (Text-to-Speech)

Mit der Gemini API kann Texteingabe mithilfe der nativen Text-to-Speech-Funktionen (TTS) in Audio mit einem oder mehreren Sprechern umgewandelt werden. Die Sprachausgabe (TTS) ist steuerbar. Das bedeutet, dass Sie mit natürlicher Sprache Interaktionen strukturieren und den Stil, Akzent, Rhythmus und Ton des Audios festlegen können.

Die TTS-Funktion unterscheidet sich von der Sprachgenerierung über die Live API, die für interaktive, unstrukturierte Audio- und multimodale Ein- und Ausgaben konzipiert ist. Während die Live API sich durch dynamische Konversationskontexte auszeichnet, ist die TTS über die Gemini API auf Szenarien zugeschnitten, in denen eine genaue Textwiedergabe mit detaillierter Steuerung von Stil und Klang erforderlich ist, z. B. bei der Erstellung von Podcasts oder Hörbüchern.

In dieser Anleitung erfahren Sie, wie Sie Audio mit einem oder mehreren Sprechern aus Text generieren.

Hinweis

Achten Sie darauf, dass Sie eine Gemini 2.5-Modellvariante mit nativer Text-zu-Sprache-Funktion (TTS) verwenden, wie im Abschnitt Unterstützte Modelle aufgeführt. Für optimale Ergebnisse sollten Sie überlegen, welches Modell am besten zu Ihrem spezifischen Anwendungsfall passt.

Es kann hilfreich sein, die Gemini 2.5-TTS-Modelle in AI Studio zu testen, bevor Sie mit der Entwicklung beginnen.

Sprachausgabe mit einem einzelnen Sprecher

Wenn Sie Text in Audioinhalte mit einem einzelnen Sprecher umwandeln möchten, legen Sie die Antwortmodalität auf „audio“ fest und übergeben Sie ein SpeechConfig-Objekt mit VoiceConfig. Sie müssen einen Namen für die Stimme aus den vordefinierten Ausgabestimmen auswählen.

In diesem Beispiel wird die Audioausgabe des Modells in einer WAV-Datei gespeichert:

Python

from google import genai
from google.genai import types
import wave

# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
   with wave.open(filename, "wb") as wf:
      wf.setnchannels(channels)
      wf.setsampwidth(sample_width)
      wf.setframerate(rate)
      wf.writeframes(pcm)

client = genai.Client()

response = client.models.generate_content(
   model="gemini-2.5-flash-preview-tts",
   contents="Say cheerfully: Have a wonderful day!",
   config=types.GenerateContentConfig(
      response_modalities=["AUDIO"],
      speech_config=types.SpeechConfig(
         voice_config=types.VoiceConfig(
            prebuilt_voice_config=types.PrebuiltVoiceConfig(
               voice_name='Kore',
            )
         )
      ),
   )
)

data = response.candidates[0].content.parts[0].inline_data.data

file_name='out.wav'
wave_file(file_name, data) # Saves the file to current directory

JavaScript

import {GoogleGenAI} from '@google/genai';
import wav from 'wav';

async function saveWaveFile(
   filename,
   pcmData,
   channels = 1,
   rate = 24000,
   sampleWidth = 2,
) {
   return new Promise((resolve, reject) => {
      const writer = new wav.FileWriter(filename, {
            channels,
            sampleRate: rate,
            bitDepth: sampleWidth * 8,
      });

      writer.on('finish', resolve);
      writer.on('error', reject);

      writer.write(pcmData);
      writer.end();
   });
}

async function main() {
   const ai = new GoogleGenAI({});

   const response = await ai.models.generateContent({
      model: "gemini-2.5-flash-preview-tts",
      contents: [{ parts: [{ text: 'Say cheerfully: Have a wonderful day!' }] }],
      config: {
            responseModalities: ['AUDIO'],
            speechConfig: {
               voiceConfig: {
                  prebuiltVoiceConfig: { voiceName: 'Kore' },
               },
            },
      },
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   const fileName = 'out.wav';
   await saveWaveFile(fileName, audioBuffer);
}
await main();

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "contents": [{
          "parts":[{
            "text": "Say cheerfully: Have a wonderful day!"
          }]
        }],
        "generationConfig": {
          "responseModalities": ["AUDIO"],
          "speechConfig": {
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Kore"
              }
            }
          }
        },
        "model": "gemini-2.5-flash-preview-tts",
    }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
          base64 --decode >out.pcm
# You may need to install ffmpeg.
ffmpeg -f s16le -ar 24000 -ac 1 -i out.pcm out.wav

Sprachausgabe mit mehreren Sprechern

Für Audio mit mehreren Sprechern benötigen Sie ein MultiSpeakerVoiceConfig-Objekt, in dem jeder Sprecher (bis zu 2) als SpeakerVoiceConfig konfiguriert ist. Sie müssen jedes speaker mit denselben Namen definieren, die im Prompt verwendet werden:

Python

from google import genai
from google.genai import types
import wave

# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
   with wave.open(filename, "wb") as wf:
      wf.setnchannels(channels)
      wf.setsampwidth(sample_width)
      wf.setframerate(rate)
      wf.writeframes(pcm)

client = genai.Client()

prompt = """TTS the following conversation between Joe and Jane:
         Joe: How's it going today Jane?
         Jane: Not too bad, how about you?"""

response = client.models.generate_content(
   model="gemini-2.5-flash-preview-tts",
   contents=prompt,
   config=types.GenerateContentConfig(
      response_modalities=["AUDIO"],
      speech_config=types.SpeechConfig(
         multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
            speaker_voice_configs=[
               types.SpeakerVoiceConfig(
                  speaker='Joe',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Kore',
                     )
                  )
               ),
               types.SpeakerVoiceConfig(
                  speaker='Jane',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Puck',
                     )
                  )
               ),
            ]
         )
      )
   )
)

data = response.candidates[0].content.parts[0].inline_data.data

file_name='out.wav'
wave_file(file_name, data) # Saves the file to current directory

JavaScript

import {GoogleGenAI} from '@google/genai';
import wav from 'wav';

async function saveWaveFile(
   filename,
   pcmData,
   channels = 1,
   rate = 24000,
   sampleWidth = 2,
) {
   return new Promise((resolve, reject) => {
      const writer = new wav.FileWriter(filename, {
            channels,
            sampleRate: rate,
            bitDepth: sampleWidth * 8,
      });

      writer.on('finish', resolve);
      writer.on('error', reject);

      writer.write(pcmData);
      writer.end();
   });
}

async function main() {
   const ai = new GoogleGenAI({});

   const prompt = `TTS the following conversation between Joe and Jane:
         Joe: How's it going today Jane?
         Jane: Not too bad, how about you?`;

   const response = await ai.models.generateContent({
      model: "gemini-2.5-flash-preview-tts",
      contents: [{ parts: [{ text: prompt }] }],
      config: {
            responseModalities: ['AUDIO'],
            speechConfig: {
               multiSpeakerVoiceConfig: {
                  speakerVoiceConfigs: [
                        {
                           speaker: 'Joe',
                           voiceConfig: {
                              prebuiltVoiceConfig: { voiceName: 'Kore' }
                           }
                        },
                        {
                           speaker: 'Jane',
                           voiceConfig: {
                              prebuiltVoiceConfig: { voiceName: 'Puck' }
                           }
                        }
                  ]
               }
            }
      }
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   const fileName = 'out.wav';
   await saveWaveFile(fileName, audioBuffer);
}

await main();

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
  "contents": [{
    "parts":[{
      "text": "TTS the following conversation between Joe and Jane:
                Joe: Hows it going today Jane?
                Jane: Not too bad, how about you?"
    }]
  }],
  "generationConfig": {
    "responseModalities": ["AUDIO"],
    "speechConfig": {
      "multiSpeakerVoiceConfig": {
        "speakerVoiceConfigs": [{
            "speaker": "Joe",
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Kore"
              }
            }
          }, {
            "speaker": "Jane",
            "voiceConfig": {
              "prebuiltVoiceConfig": {
                "voiceName": "Puck"
              }
            }
          }]
      }
    }
  },
  "model": "gemini-2.5-flash-preview-tts",
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
    base64 --decode > out.pcm
# You may need to install ffmpeg.
ffmpeg -f s16le -ar 24000 -ac 1 -i out.pcm out.wav

Sprachstil mit Prompts steuern

Sie können Stil, Ton, Akzent und Tempo sowohl für die Sprachausgabe mit einem als auch mit mehreren Sprechern über Prompts in natürlicher Sprache steuern. Bei einem Prompt mit nur einem Sprecher können Sie beispielsweise Folgendes sagen:

Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"

Geben Sie in einem Prompt mit mehreren Sprechern den Namen und das entsprechende Transkript für jeden Sprecher an. Sie können auch für jeden Lautsprecher einzeln Anweisungen geben:

Make Speaker1 sound tired and bored, and Speaker2 sound excited and happy:

Speaker1: So... what's on the agenda today?
Speaker2: You're never going to guess!

Verwenden Sie eine Stimmoption, die dem Stil oder der Emotion entspricht, die Sie vermitteln möchten, um diese noch stärker zu betonen. Im vorherigen Prompt könnte beispielsweise die gehauchte Stimme von Enceladus die Wörter „müde“ und „gelangweilt“ betonen, während der fröhliche Ton von Puck die Wörter „aufgeregt“ und „glücklich“ ergänzen könnte.

Prompt zum Konvertieren in Audio generieren

Die TTS-Modelle geben nur Audio aus. Sie können jedoch andere Modelle verwenden, um zuerst ein Transkript zu erstellen, das Sie dann dem TTS-Modell zum Vorlesen übergeben.

Python

from google import genai
from google.genai import types

client = genai.Client()

transcript = client.models.generate_content(
   model="gemini-2.0-flash",
   contents="""Generate a short transcript around 100 words that reads
            like it was clipped from a podcast by excited herpetologists.
            The hosts names are Dr. Anya and Liam.""").text

response = client.models.generate_content(
   model="gemini-2.5-flash-preview-tts",
   contents=transcript,
   config=types.GenerateContentConfig(
      response_modalities=["AUDIO"],
      speech_config=types.SpeechConfig(
         multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
            speaker_voice_configs=[
               types.SpeakerVoiceConfig(
                  speaker='Dr. Anya',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Kore',
                     )
                  )
               ),
               types.SpeakerVoiceConfig(
                  speaker='Liam',
                  voice_config=types.VoiceConfig(
                     prebuilt_voice_config=types.PrebuiltVoiceConfig(
                        voice_name='Puck',
                     )
                  )
               ),
            ]
         )
      )
   )
)

# ...Code to stream or save the output

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {

const transcript = await ai.models.generateContent({
   model: "gemini-2.0-flash",
   contents: "Generate a short transcript around 100 words that reads like it was clipped from a podcast by excited herpetologists. The hosts names are Dr. Anya and Liam.",
   })

const response = await ai.models.generateContent({
   model: "gemini-2.5-flash-preview-tts",
   contents: transcript,
   config: {
      responseModalities: ['AUDIO'],
      speechConfig: {
         multiSpeakerVoiceConfig: {
            speakerVoiceConfigs: [
                   {
                     speaker: "Dr. Anya",
                     voiceConfig: {
                        prebuiltVoiceConfig: {voiceName: "Kore"},
                     }
                  },
                  {
                     speaker: "Liam",
                     voiceConfig: {
                        prebuiltVoiceConfig: {voiceName: "Puck"},
                    }
                  }
                ]
              }
            }
      }
  });
}
// ..JavaScript code for exporting .wav file for output audio

await main();

Sprachoptionen

TTS-Modelle unterstützen die folgenden 30 Sprachoptionen im Feld voice_name:

Zephyr – Hell Puck – Upbeat Charon – Informative
Kore – Fest Fenrir – Leicht erregbar Leda – Jugendlich
Orus – Firm Aoede – Breezy Callirrhoe – Gelassen
Autonoe – Hell Enceladus – Breathy Iapetus – Clear
Umbriel – Gelassen Algieba – Smooth Despina – Sanft
Erinome – Wolkenlos Algenib – Kiesig Rasalgethi – Informativ
Laomedeia – Upbeat Achernar – Weich Alnilam – Firm
Schedar – Gerade Gacrux – Nicht jugendfrei Pulcherrima – Vorwärts
Achird – Freundlich Zubenelgenubi – Casual Vindemiatrix – Sanft
Sadachbia – Lively Sadaltager – Sachkundig Sulafat – Warm

Alle Sprachoptionen sind in AI Studio verfügbar.

Unterstützte Sprachen

Die TTS-Modelle erkennen die Eingabesprache automatisch. Sie unterstützen die folgenden 24 Sprachen:

Sprache BCP-47-Code Sprache BCP-47-Code
Arabisch (Ägypten) ar-EG Deutsch (Deutschland) de-DE
Englisch (USA) en-US Spanisch (USA) es-US
Französisch (Frankreich) fr-FR Hindi (Indien) hi-IN
Indonesisch (Indonesien) id-ID Italienisch (Italien) it-IT
Japanisch (Japan) ja-JP Koreanisch (Korea) ko-KR
Portugiesisch (Brasilien) pt-BR Russisch (Russland) ru-RU
Niederländisch (Niederlande) nl-NL Polnisch (Polen) pl-PL
Thailändisch (Thailand) th-TH Türkisch (Türkei) tr-TR
Vietnamesisch (Vietnam) vi-VN Rumänisch (Rumänien) ro-RO
Ukrainisch (Ukraine) uk-UA Bengalisch (Bangladesch) bn-BD
Englisch (Indien) en-IN- und hi-IN-Set Marathi (Indien) mr-IN
Tamil (Indien) ta-IN Telugu (Indien) te-IN

Unterstützte Modelle

Modell Einzelner Sprecher Multispeaker
Gemini 2.5 Flash Preview – TTS ✔️ ✔️
Gemini 2.5 Pro Preview – TTS ✔️ ✔️

Beschränkungen

  • TTS-Modelle können nur Texteingaben empfangen und Audioausgaben generieren.
  • Eine TTS-Sitzung hat ein Kontextfenster-Limit von 32.000 Tokens.
  • Im Abschnitt Sprachen finden Sie Informationen zur Sprachunterstützung.

Nächste Schritte