Sie können ein Gemini-TTS-Modell auffordern, eine Sprachausgabe (Audio) aus einem Text-Prompt zu generieren. Wenn Sie Firebase AI Logic verwenden, können Sie diese Anfrage direkt über Ihre App stellen.
Die Text-zu-Sprache-Generierung (TTS) ist steuerbar, d. h., Sie geben den genauen Text an, der in Sprache umgewandelt werden soll. Außerdem können Sie in Ihren Prompts natürliche Sprache verwenden, um Stil, Akzent, Tempo und Ton der Audioausgabe zu steuern. Sie können sich TTS als das Gegenteil der Transkription (Speech-to-Text) vorstellen.
Diese Funktion ist mit allen Gemini--tts-Modellen verfügbar, die für eine hochwertige Sprachgenerierung mit niedriger Latenz optimiert sind.
Mit dieser Funktion können Sie beispielsweise Folgendes tun:
Interaktives Storytelling: Erstellen Sie immersive Hörbücher oder Rollenspiele, bei denen das Modell die Stimme für verschiedene Charaktere wechselt oder den Tonfall an die Erzählung anpasst (z. B. Flüstern bei Spannung oder Lachen über einen Witz).
Sprachen lernen: Erstellen Sie Aussprachehilfen, die Text mit bestimmten regionalen Akzenten oder langsamer vorlesen, um Lernenden zu helfen, schwierige Aussprachen zu üben.
Kontextsensitive Inhaltsleser: Nachrichtenartikel, Rezepte oder Blogposts werden mit einer Stimme und einem emotionalen Tonfall vorgelesen, die zum Inhalt passen (z. B. ein ernster Tonfall für Eilmeldungen oder ein warmer, geduldiger Tonfall für Schritt-für-Schritt-Kochanleitungen).
In diesem Leitfaden wird beschrieben, wie Sie Sprache aus Texteingaben mit einem oder mehreren Sprechern generieren und die Audioantwort streamen.
Zum Code für einen einzelnen Sprecher springen Zum Code für mehrere Sprecher springen Zum Code für gestreamte Antworten springen
Vergleich zwischen TTS und dem Live API
Sowohl Text-to-Speech-Modelle (TTS) als auch Live API-Modelle sind sprachgenerierende Modelle mit niedriger Latenz, die für verschiedene Antwortstimmen und Sprachen konfiguriert werden können. Sie dienen jedoch sehr unterschiedlichen Anwendungsfällen.
Die Sprachausgabe (Text-to-Speech, TTS) ist eine unidirektionale Anfrage-Antwort-Interaktion (Texteingabe, Audioausgabe). Es ist auf Szenarien zugeschnitten, die eine genaue Wiedergabe des bereitgestellten Textes mit detaillierter Kontrolle über Stil und Klang erfordern, z. B. Podcast-Erzählungen, Hörbücher oder das Vorlesen von Artikeln.
Die Live API-Generation unterstützt bidirektionales Streaming für Echtzeit-Sprachunterhaltungen (Spracheingabe, Sprachausgabe). Es eignet sich hervorragend für dynamische Konversationskontexte, in denen das Modell entscheidet, welche Sprache zurückgegeben werden soll. Die neuesten Live API-Modelle unterstützen auch Video- und Bildeingaben.
Hinweis
|
Klicken Sie auf Ihren Gemini API-Anbieter, um anbieterspezifische Inhalte und Code auf dieser Seite aufzurufen. |
Falls noch nicht geschehen, lesen Sie den Startleitfaden. Dort wird beschrieben, wie Sie Ihr Firebase-Projekt einrichten, Ihre App mit Firebase verbinden, das SDK hinzufügen, den Backend-Dienst für den ausgewählten Gemini API-Anbieter initialisieren und eine GenerativeModel-Instanz erstellen.
Zum Testen und Iterieren Ihrer Prompts empfehlen wir die Verwendung von Google AI Studio.
Modelle, die diese Funktion unterstützen
gemini-3.1-flash-tts-preview
Sprache aus Text generieren
Sie können mit einem Gemini-TTS-Modell Sprache aus bereitgestelltem Text generieren.
Sprache mit einem einzelnen Sprecher generieren
|
Bevor Sie dieses Beispiel ausprobieren, führen Sie die Schritte im Abschnitt Vorbereitung dieses Leitfadens aus, um Ihr Projekt und Ihre App einzurichten. In diesem Abschnitt klicken Sie auch auf eine Schaltfläche für den ausgewählten Gemini API-Anbieter, damit Sie auf dieser Seite anbieterspezifische Inhalte sehen. |
Sie können das Modell so konfigurieren, dass Audio mit einer einzelnen Stimme ausgegeben wird.
Fügen Sie in Ihrer GenerationConfig Folgendes ein:
Legen Sie
responseModalitiesso fest, dassAUDIOenthalten ist.Konfigurieren Sie einen
SpeechConfigmit Folgendem:(Erforderlich) Name der Antwortstimme (z. B.
Kore)(Optional) Sprachcode.
Wenn Sie keine Sprache angeben, können die Gemini-TTS-Modelle die Sprache im Prompt automatisch erkennen.
Rufen Sie generateContent mit Ihrem Text-Prompt auf. Das Modell gibt PCM-Audiorohdaten in den Antwortteilen zurück.
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
let config = GenerationConfig(
responseModalities: [.audio],
speechConfig: SpeechConfig(voiceName: "Kore", languageCode: "en-US")
)
// Create a `GenerativeModel` instance with a model that supports speech generation.
let model = ai.generativeModel(
modelName: "gemini-3.1-flash-tts-preview",
generationConfig: config
)
// Provide a text prompt.
let prompt = "Say cheerfully: Have a wonderful day!"
// Call `generateContent` to generate the speech output based on your text prompt.
let response = try await model.generateContent(prompt)
// Extract the audio data and handle it for downstream use. For example:
for part in response.inlineDataParts {
let data = part.data // Raw PCM audio bytes (24kHz, 1 channel, 16-bit)
let mimeType = part.mimeType // for example: "audio/pcm"
print("Received audio data with MIME type: \(mimeType)")
// To play back raw PCM audio bytes, you'll need to write your own `playRawPcm` function.
playRawPcm(data: data)
}
Kotlin
In Kotlin sind die Methoden in diesem SDK Suspend-Funktionen und müssen aus einem Koroutinenbereich aufgerufen werden.
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
val config = generationConfig {
responseModalities = listOf(ResponseModality.AUDIO)
speechConfig = SpeechConfig(
voice = Voice("Kore"),
languageCode = "en-US"
)
}
// Initialize the Gemini Developer API backend service.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel(
modelName = "gemini-3.1-flash-tts-preview",
generationConfig = config
)
// Provide a text prompt.
val prompt = "Say cheerfully: Have a wonderful day!"
// Call `generateContent` to generate the speech output based on your text prompt.
val response = model.generateContent(prompt)
// Extract the audio data and handle it for downstream use. For example:
val part = response.candidates.firstOrNull()?.content?.parts?.firstOrNull()
if (part is InlineDataPart) {
val pcmData = part.inlineData // Raw PCM bytes (24kHz, 1 channel, 16-bit)
val mimeType = part.mimeType // for example: "audio/pcm"
// To play back PCM audio data, you'll need to write your own `playAudio` function.
playAudio(pcmData)
}
Java
In Java geben die Streamingmethoden in diesem SDK einenPublisher-Typ aus der Reactive Streams-Bibliothek zurück.
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
GenerationConfig config = new GenerationConfig.Builder()
.setResponseModalities(Collections.singletonList(ResponseModality.AUDIO))
.setSpeechConfig(new SpeechConfig(new Voice("Kore"), "en-US"))
.build();
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.1-flash-tts-preview", config);
// Use the GenerativeModelFutures Java compatibility layer.
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
// Provide a text prompt.
String prompt = "Say cheerfully: Have a wonderful day!";
Content content = new Content.Builder().addText(prompt).build();
Executor executor = Executors.newSingleThreadExecutor();
// Call `generateContent` to generate the speech output based on your text prompt.
// Extract the audio data and handle it for downstream use.
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
Part part = result.getCandidates().get(0).getContent().getParts().get(0);
if (part instanceof InlineDataPart) {
byte[] pcmData = ((InlineDataPart) part).getInlineData();
String mimeType = ((InlineDataPart) part).getMimeType();
// To play back PCM audio data, you'll need to write your own `playAudio` function.
playAudio(pcmData);
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, ResponseModality } from "firebase/ai";
// TODO(developer): Replace with your app's Firebase configuration
const firebaseConfig = { /* ... */ };
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
const generationConfig = {
responseModalities: [ResponseModality.AUDIO],
speechConfig: {
voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } },
languageCode: "en-US"
}
};
// Create a `GenerativeModel` instance with a model that supports speech generation.
const model = getGenerativeModel(ai, {
model: "gemini-3.1-flash-tts-preview",
generationConfig
});
// Provide a text prompt.
const prompt = "Say cheerfully: Have a wonderful day!";
// Call `generateContent` to generate the speech output based on your text prompt.
const result = await model.generateContent(prompt);
const inlineDataParts = result.response.inlineDataParts();
// Extract the audio data and handle it for downstream use. For example:
if (inlineDataParts?.[0]) {
const pcmBase64 = inlineDataParts[0].inlineData.data;
// Decode base64 to ArrayBuffer
const pcmBuffer = Uint8Array.from(atob(pcmBase64), c => c.charCodeAt(0)).buffer;
// To play back a PCM buffer, you'll need to write your own `playAudio` function.
playAudio(pcmBuffer);
}
Dart
import 'package:firebase_ai/firebase_ai.dart';
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
final config = GenerationConfig(
responseModalities: [ResponseModalities.audio],
speechConfig: SpeechConfig(voiceName: 'Kore', languageCode: 'en-US'),
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
final model = FirebaseAI.googleAI().generativeModel(
model: 'gemini-3.1-flash-tts-preview',
generationConfig: config,
);
// Provide a text prompt.
final prompt = 'Say cheerfully: Have a wonderful day!';
// Call `generateContent` to generate the speech output based on your text prompt.
final response = await model.generateContent([Content.text(prompt)]);
// Extract the audio data and handle it for downstream use. For example:
final part = response.candidates.first.content.parts.first;
if (part is InlineDataPart && part.mimeType.startsWith('audio/')) {
final Uint8List pcmData = part.bytes; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
// To play back PCM audio data, you'll need to write your own `playAudio` function.
await playAudio(pcmData);
}
Einheit
using Firebase.AI;
// Set `responseModalities` to include `Audio`.
// Configure a `SpeechConfig` with your chosen voice name and language code.
var config = new GenerationConfig(
responseModalities: new System.Collections.Generic.List<ResponseModality> { ResponseModality.Audio },
speechConfig: SpeechConfig.UsePrebuiltVoice("Kore", "en-US")
);
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports speech generation.
var model = ai.GetGenerativeModel(
modelName: "gemini-3.1-flash-tts-preview",
generationConfig: config
);
// Provide a text prompt.
var prompt = "Say cheerfully: Have a wonderful day!";
// Call `GenerateContentAsync` to generate the speech output based on your text prompt.
var response = await model.GenerateContentAsync(prompt);
// Extract the audio data and handle it for downstream use. For example:
if (response.Candidates.Count > 0) {
foreach (var part in response.Candidates[0].Content.Parts) {
if (part is ModelContent.InlineDataPart inlineData) {
byte[] pcmData = inlineData.Data; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
// To play back PCM audio data, you'll need to write your own `playAudio` function.
playAudio(pcmData);
}
}
}
Sprache mit mehreren Sprechern generieren
|
Bevor Sie dieses Beispiel ausprobieren, führen Sie die Schritte im Abschnitt Vorbereitung dieses Leitfadens aus, um Ihr Projekt und Ihre App einzurichten. In diesem Abschnitt klicken Sie auch auf eine Schaltfläche für den ausgewählten Gemini API-Anbieter, damit Sie auf dieser Seite anbieterspezifische Inhalte sehen. |
Sie können das Modell so konfigurieren, dass für verschiedene Sprecher im Text unterschiedliche Stimmen verwendet werden. Das ist nützlich, um Audio für Dialoge oder Unterhaltungen zu generieren.
Erstellen Sie eine
MultiSpeakerVoiceConfig, die Sprechernamen (die Sie in Ihrem Prompt verwenden) bestimmten Antwortstimm-Namen zuordnet (z. B.Kore).Die Konfiguration für mehrere Sprecher unterstützt genau zwei Sprecher.
Fügen Sie in Ihrer
GenerationConfigFolgendes ein:Legen Sie
responseModalitiesso fest, dassAUDIOenthalten ist.Konfigurieren Sie einen
SpeechConfigmit Folgendem:(Erforderlich) Übergeben Sie Ihre
MultiSpeakerVoiceConfig.(Optional) Sprachcode.
Wenn Sie keine Sprache angeben, können die Gemini-TTS-Modelle die Sprache im Prompt automatisch erkennen.
Geben Sie in Ihrem Prompt an, wer spricht, indem Sie die Namen der Sprecher als Präfixe verwenden (z. B.
Joe: Hello. Jane: Hi.).
Rufen Sie generateContent mit Ihrem Text-Prompt auf. Das Modell gibt PCM-Audiorohdaten in den Antwortteilen zurück.
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Configure a `SpeechConfig` for multiple speakers, assigning a voice to each speaker.
let multiSpeechConfig = SpeechConfig(
multiSpeakerVoiceConfig: MultiSpeakerVoiceConfig(
speakerVoiceConfigs: [
SpeakerVoiceConfig(speaker: "Joe", voiceName: "Puck"),
SpeakerVoiceConfig(speaker: "Jane", voiceName: "Kore")
]
),
languageCode: "en-US"
)
// Set `responseModalities` to include `audio`.
let config = GenerationConfig(
responseModalities: [.audio],
speechConfig: multiSpeechConfig
)
// Create a `GenerativeModel` instance with a model that supports speech generation.
let model = ai.generativeModel(
modelName: "gemini-3.1-flash-tts-preview",
generationConfig: config
)
// Provide a text prompt that includes the names of the speakers.
let prompt = """
Joe: How's it going today Jane?
Jane: Not too bad, how about you?
"""
// Call `generateContent` to generate the speech output based on your text prompt.
let response = try await model.generateContent(prompt)
// Extract the audio data and handle it for downstream use. For example:
for part in response.inlineDataParts {
let data = part.data // Raw PCM audio bytes (24kHz, 1 channel, 16-bit)
let mimeType = part.mimeType // for example: "audio/pcm"
print("Received audio data with MIME type: \(mimeType)")
// To play back raw PCM audio bytes, you'll need to write your own `playRawPcm` function.
playRawPcm(data: data)
}
Kotlin
In Kotlin sind die Methoden in diesem SDK Suspend-Funktionen und müssen aus einem Koroutinenbereich aufgerufen werden.
// Configure a `SpeechConfig` for multiple speakers, assigning a voice to each speaker.
val multiSpeechConfig = SpeechConfig(
multiSpeakerVoiceConfig = MultiSpeakerVoiceConfig(
speakerVoiceConfigs = listOf(
SpeakerVoiceConfig(speaker = "Joe", voice = Voice("Puck")),
SpeakerVoiceConfig(speaker = "Jane", voice = Voice("Kore"))
)
),
languageCode = "en-US"
)
// Set `responseModalities` to include `AUDIO`.
val config = generationConfig {
responseModalities = listOf(ResponseModality.AUDIO)
speechConfig = multiSpeechConfig
}
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel(
modelName = "gemini-3.1-flash-tts-preview",
generationConfig = config
)
// Provide a text prompt that includes the names of the speakers.
val prompt = """
Joe: How's it going today Jane?
Jane: Not too bad, how about you?
"""
// Call `generateContent` to generate the speech output based on your text prompt.
val response = model.generateContent(prompt)
// Extract the audio data and handle it for downstream use. For example:
val part = response.candidates.firstOrNull()?.content?.parts?.firstOrNull()
if (part is InlineDataPart) {
val pcmData = part.inlineData // Raw PCM bytes (24kHz, 1 channel, 16-bit)
val mimeType = part.mimeType // for example: "audio/pcm"
// To play back PCM audio data, you'll need to write your own `playAudio` function.
playAudio(pcmData)
}
Java
In Java geben die Streamingmethoden in diesem SDK einenPublisher-Typ aus der Reactive Streams-Bibliothek zurück.
// Configure a `SpeechConfig` for multiple speakers, assigning a voice to each speaker.
MultiSpeakerVoiceConfig multiSpeakerVoiceConfig = new MultiSpeakerVoiceConfig(
Arrays.asList(
new SpeakerVoiceConfig("Joe", new Voice("Puck")),
new SpeakerVoiceConfig("Jane", new Voice("Kore"))
)
);
SpeechConfig multiSpeechConfig = new SpeechConfig(multiSpeakerVoiceConfig);
// Set `responseModalities` to include `AUDIO`.
GenerationConfig config = new GenerationConfig.Builder()
.setResponseModalities(Collections.singletonList(ResponseModality.AUDIO))
.setSpeechConfig(multiSpeechConfig)
.build();
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.1-flash-tts-preview", config);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
// Provide a text prompt that includes the names of the speakers.
String prompt = "Joe: How's it going today Jane?\nJane: Not too bad, how about you?";
Content content = new Content.Builder().addText(prompt).build();
Executor executor = Executors.newSingleThreadExecutor();
// Call `generateContent` to generate the speech output based on your text prompt.
// Extract the audio data and handle it for downstream use.
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
Part part = result.getCandidates().get(0).getContent().getParts().get(0);
if (part instanceof InlineDataPart) {
byte[] pcmData = ((InlineDataPart) part).getInlineData(); // Raw PCM bytes (24kHz, 1 channel, 16-bit)
String mimeType = ((InlineDataPart) part).getMimeType(); // for example: "audio/pcm"
// To play back PCM audio data, you'll need to write your own `playAudio` function.
playAudio(pcmData);
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, ResponseModality } from "firebase/ai";
// TODO(developer): Replace with your app's Firebase configuration
const firebaseConfig = { /* ... */ };
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` for multiple speakers, assigning a voice to each speaker.
const generationConfig = {
responseModalities: [ResponseModality.AUDIO],
speechConfig: {
multiSpeakerVoiceConfig: {
speakerVoiceConfigs: [
{ speaker: "Joe", voiceConfig: { prebuiltVoiceConfig: { voiceName: "Puck" } } },
{ speaker: "Jane", voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } }
]
},
languageCode: "en-US"
}
};
// Create a `GenerativeModel` instance with a model that supports speech generation.
const model = getGenerativeModel(ai, {
model: "gemini-3.1-flash-tts-preview",
generationConfig
});
// Provide a text prompt that includes the names of the speakers.
const prompt = `
Joe: How's it going today Jane?
Jane: Not too bad, how about you?
`;
// Call `generateContent` to generate the speech output based on your text prompt.
const result = await model.generateContent(prompt);
const inlineDataParts = result.response.inlineDataParts();
// Extract the audio data and handle it for downstream use. For example:
if (inlineDataParts?.[0]) {
const pcmBase64 = inlineDataParts[0].inlineData.data; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
const pcmBuffer = Uint8Array.from(atob(pcmBase64), c => c.charCodeAt(0)).buffer;
// To play back a PCM buffer, you'll need to write your own `playAudio` function.
playAudio(pcmBuffer);
}
Dart
import 'package:firebase_ai/firebase_ai.dart';
// Configure a `SpeechConfig` for multiple speakers, assigning a voice to each speaker.
final multiSpeechConfig = SpeechConfig.multiSpeaker(
multiSpeakerVoiceConfig: MultiSpeakerVoiceConfig(
speakerVoiceConfigs: [
SpeakerVoiceConfig(speaker: 'Joe', voiceName: 'Puck'),
SpeakerVoiceConfig(speaker: 'Jane', voiceName: 'Kore'),
],
),
languageCode: 'en-US',
);
// Set `responseModalities` to include `audio`.
final config = GenerationConfig(
responseModalities: [ResponseModalities.audio],
speechConfig: multiSpeechConfig,
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
final model = FirebaseAI.googleAI().generativeModel(
model: 'gemini-3.1-flash-tts-preview',
generationConfig: config,
);
// Provide a text prompt that includes the names of the speakers.
final prompt = '''
Joe: How's it going today Jane?
Jane: Not too bad, how about you?
''';
// Call `generateContent` to generate the speech output based on your text prompt.
final response = await model.generateContent([Content.text(prompt)]);
// Extract the audio data and handle it for downstream use. For example:
final part = response.candidates.first.content.parts.first;
if (part is InlineDataPart && part.mimeType.startsWith('audio/')) {
final Uint8List pcmData = part.bytes; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
// To play back PCM audio data, you'll need to write your own `playAudio` function.
await playAudio(pcmData);
}
Einheit
using Firebase.AI;
// Configure a `SpeechConfig` for multiple speakers, assigning a voice to each speaker.
var multiSpeakerVoiceConfig = new MultiSpeakerVoiceConfig(
new System.Collections.Generic.List<SpeakerVoiceConfig> {
SpeakerVoiceConfig.UsePrebuiltVoice("Joe", "Puck"),
SpeakerVoiceConfig.UsePrebuiltVoice("Jane", "Kore")
}
);
var multiSpeechConfig = SpeechConfig.UseMultiSpeakerVoice(multiSpeakerVoiceConfig);
// Set `responseModalities` to include `Audio`.
var config = new GenerationConfig(
responseModalities: new System.Collections.Generic.List<ResponseModality> { ResponseModality.Audio },
speechConfig: multiSpeechConfig
);
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports speech generation.
var model = ai.GetGenerativeModel(
modelName: "gemini-3.1-flash-tts-preview",
generationConfig: config
);
// Provide a text prompt that includes the names of the speakers.
var prompt = "Joe: How's it going today Jane?\nJane: Not too bad, how about you?";
// Call `GenerateContentAsync` to generate the speech output based on your text prompt.
var response = await model.GenerateContentAsync(prompt);
// Extract the audio data and handle it for downstream use. For example:
if (response.Candidates.Count > 0) {
foreach (var part in response.Candidates[0].Content.Parts) {
if (part is ModelContent.InlineDataPart inlineData) {
byte[] pcmData = inlineData.Data; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
// To play back PCM audio data, you'll need to write your own `playAudio` function.
playAudio(pcmData);
}
}
}
Antwort streamen
|
Bevor Sie dieses Beispiel ausprobieren, führen Sie die Schritte im Abschnitt Vorbereitung dieses Leitfadens aus, um Ihr Projekt und Ihre App einzurichten. In diesem Abschnitt klicken Sie auch auf eine Schaltfläche für den ausgewählten Gemini API-Anbieter, damit Sie auf dieser Seite anbieterspezifische Inhalte sehen. |
Sie können schnellere Interaktionen und eine geringere Latenz erreichen, indem Sie die Audioantwort streamen, während sie generiert wird, anstatt zu warten, bis die gesamte Audiodatei fertig ist.
Das Streaming von generierter Sprache wird sowohl für Konfigurationen mit einem Sprecher als auch für Konfigurationen mit mehreren Sprechern unterstützt. Er wird nur bei Verwendung der Gemini 3.x TTS-Modelle unterstützt.
Wenn Sie die Sprachantwort streamen möchten, rufen Sie generateContentStream anstelle von generateContent auf und verarbeiten Sie die Chunks, sobald sie eintreffen. In den folgenden Beispielen wird gezeigt, wie eine Antwort mit einem einzelnen Sprecher gestreamt wird:
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Set `responseModalities` to include `audio`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
let config = GenerationConfig(
responseModalities: [.audio],
speechConfig: SpeechConfig(voiceName: "Kore")
)
// Create a `GenerativeModel` instance with a model that supports speech generation.
let model = ai.generativeModel(
modelName: "gemini-3.1-flash-tts-preview",
generationConfig: config
)
// Provide a text prompt.
let prompt = "Tell me a story about a brave knight."
// Call `generateContentStream` to generate the speech output stream based on your text prompt.
let responseStream = try model.generateContentStream(prompt)
// Extract the audio data and handle it for downstream use. For example:
for try await chunk in responseStream {
for part in chunk.inlineDataParts {
let data = part.data // Raw PCM audio bytes (24kHz, 1 channel, 16-bit)
let mimeType = part.mimeType // for example: "audio/pcm"
// Append the audio chunk to your audio queue/buffer for playback.
appendAudioChunk(data)
}
}
Kotlin
In Kotlin sind die Methoden in diesem SDK Suspend-Funktionen und müssen aus einem Koroutinenbereich aufgerufen werden.
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
val config = generationConfig {
responseModalities = listOf(ResponseModality.AUDIO)
speechConfig = SpeechConfig(voice = Voice("Kore"))
}
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel(
modelName = "gemini-3.1-flash-tts-preview",
generationConfig = config
)
// Provide a text prompt.
val prompt = "Tell me a story about a brave knight."
// Call `generateContentStream` to generate the speech output stream based on your text prompt.
// Extract the audio data and handle it for downstream use.
model.generateContentStream(prompt).collect { chunk ->
val part = chunk.candidates.firstOrNull()?.content?.parts?.firstOrNull()
if (part is InlineDataPart) {
val pcmChunk = part.inlineData // Raw PCM bytes (24kHz, 1 channel, 16-bit)
val mimeType = part.mimeType // for example: "audio/pcm"
// Append the audio chunk to your audio queue/buffer for playback.
appendAudioChunk(pcmChunk)
}
}
Java
In Java geben die Streamingmethoden in diesem SDK einenPublisher-Typ aus der Reactive Streams-Bibliothek zurück.
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
GenerationConfig config = new GenerationConfig.Builder()
.setResponseModalities(Collections.singletonList(ResponseModality.AUDIO))
.setSpeechConfig(new SpeechConfig(new Voice("Kore")))
.build();
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.1-flash-tts-preview", config);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
// Provide a text prompt.
String prompt = "Tell me a story about a brave knight.";
Content content = new Content.Builder().addText(prompt).build();
// Call `generateContentStream` to generate the speech output stream based on your text prompt.
Publisher<GenerateContentResponse> streamingResponse =
model.generateContentStream(content);
// Extract the audio data and handle it for downstream use.
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
@Override
public void onNext(GenerateContentResponse chunk) {
Part part = chunk.getCandidates().get(0).getContent().getParts().get(0);
if (part instanceof InlineDataPart) {
byte[] pcmChunk = ((InlineDataPart) part).getInlineData(); // Raw PCM bytes (24kHz, 1 channel, 16-bit)
String mimeType = ((InlineDataPart) part).getMimeType(); // for example: "audio/pcm"
// Append the audio chunk to your audio queue/buffer for playback.
appendAudioChunk(pcmChunk);
}
}
@Override
public void onComplete() {
// Audio stream complete.
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
});
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend, ResponseModality } from "firebase/ai";
// TODO(developer): Replace with your app's Firebase configuration
const firebaseConfig = { /* ... */ };
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
const generationConfig = {
responseModalities: [ResponseModality.AUDIO],
speechConfig: {
voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } }
}
};
// Create a `GenerativeModel` instance with a model that supports speech generation.
const model = getGenerativeModel(ai, {
model: "gemini-3.1-flash-tts-preview",
generationConfig
});
// Provide a text prompt.
const prompt = "Tell me a story about a brave knight.";
// Call `generateContentStream` to generate the speech output stream based on your text prompt.
const result = await model.generateContentStream(prompt);
// Extract the audio data and handle it for downstream use. For example:
const playbackQueue = [];
for await (const chunk of result.stream) {
const inlineDataParts = chunk.inlineDataParts();
if (inlineDataParts?.[0]) {
const pcmBase64 = inlineDataParts[0].inlineData.data; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
const pcmBuffer = Uint8Array.from(atob(pcmBase64), c => c.charCodeAt(0)).buffer;
// Append the audio chunk to your audio queue/buffer for playback.
playbackQueue.push(pcmBuffer);
}
}
// To play back an array of PCM buffers in sequence, you'll need to write your own `processPlaybackQueue` function.
processPlaybackQueue(playbackQueue);
Dart
import 'package:firebase_ai/firebase_ai.dart';
// Set `responseModalities` to include `audio`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
final config = GenerationConfig(
responseModalities: [ResponseModalities.audio],
speechConfig: SpeechConfig(voiceName: 'Kore'),
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports speech generation.
final model = FirebaseAI.googleAI().generativeModel(
model: 'gemini-3.1-flash-tts-preview',
generationConfig: config,
);
// Provide a text prompt.
final prompt = 'Tell me a story about a brave knight.';
// Call `generateContentStream` to generate the speech output stream based on your text prompt.
final responseStream = model.generateContentStream([Content.text(prompt)]);
// Extract the audio data and handle it for downstream use. For example:
await for (final chunk in responseStream) {
final part = chunk.candidates.first.content.parts.first;
if (part is InlineDataPart && part.mimeType.startsWith('audio/')) {
final Uint8List pcmChunk = part.bytes; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
// Append the audio chunk to your audio queue/buffer for playback.
appendAudioChunk(pcmChunk);
}
}
Einheit
using System.Collections.Generic;
using System.Linq;
using Firebase.AI;
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Set `ResponseModalities` to include `Audio`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
var config = new GenerationConfig(
responseModalities: new List<ResponseModality> { ResponseModality.Audio },
speechConfig: SpeechConfig.UsePrebuiltVoice("Kore")
);
// Create a `GenerativeModel` instance with a model that supports speech generation.
var model = ai.GetGenerativeModel(
modelName: "gemini-3.1-flash-tts-preview",
generationConfig: config
);
// Provide a text prompt.
var prompt = "Tell me a story about a brave knight.";
// Call `GenerateContentStreamAsync` to generate the speech output stream based on your text prompt.
var responseStream = model.GenerateContentStreamAsync(prompt);
// Extract the audio data and handle it for downstream use. For example:
await foreach (var response in responseStream)
{
var audioParts = response.Candidates.FirstOrDefault().Content.Parts
.OfType<ModelContent.InlineDataPart>();
foreach (var part in audioParts)
{
byte[] pcmChunk = part.Data; // Raw PCM bytes (24kHz, 1 channel, 16-bit)
// Append the audio chunk to your audio queue/buffer for playback.
appendAudioChunk(pcmChunk);
}
}
Sprachausgabe mit Prompts steuern
Sie können den Ton, das Tempo und den Stil der generierten Sprache mit bestimmten Prompting-Techniken beeinflussen.
Die folgenden Unterabschnitte zur Prompt-Struktur und zu Audio-Tags enthalten allgemeine Hinweise. Eine ausführliche Anleitung finden Sie in diesem Leitfaden für Prompts.
Prompt-Struktur
Die besten Ergebnisse erzielen Sie, wenn Sie Ihren Prompt mit den folgenden Komponenten strukturieren:
Audio Profile: Beschreiben Sie die Persona, die Kernidentität und den Archetyp des Sprechers (z. B.A warm, professional narrator).Scene: Beschreiben Sie die Umgebung und die emotionale Stimmung (z. B.In a quiet libraryoderAmidst a noisy crowd).Director's Notes: Beschreiben Sie die Emotion, das Tempo, den Stil und den Akzent (z. B.Speak slowly and with mystery).Sample Context: Geben Sie dem Modell einen Startpunkt (z. B.The speaker is greeting a close friend).Transkript: Der Text, der gesprochen werden soll. Die besten Ergebnisse erzielen Sie, wenn der Ton und der Kontext des Textes mit dem Stimmenprofil und den Regieanweisungen übereinstimmen.
Beispielprompt:
[Audio Profile: A young, energetic voice]
[Scene: A lively sports broadcast]
[Director's Notes: Speak fast, with high energy and excitement]
[Sample Context: The game just ended with a last-second touchdown]
Welcome back fans! What an incredible game we're witnessing today!
Audio-Tags
Sie können Formatierungs-Tags direkt in Ihren Text-Prompt einfügen, um die Leistung des Modells zu steuern.
Audio-Tags werden nur bei Verwendung der Gemini 3.x TTS-Modelle unterstützt.
Häufig verwendete Tags sind:
[whispers]: Flüstern[laughs]: Um Lachen hinzuzufügen[giggles]: Für mehr Spaß[sighs]: Seufzer hinzufügen[gasp]: Um ein Keuchen hinzuzufügen[shouting]: Schreien[excited]: Aufgeregt sprechen[serious]: Ernsthaft sprechen[sighs whispers]: Kombinierte Emotionen (Sie können Tags kombinieren)
Beachten Sie bei der Verwendung von Audio-Tags Folgendes:
Keine vollständige Liste: Es gibt keine feste Liste der unterstützten Tags. Sie können mit verschiedenen Emotionen und Ausdrücken (z. B.
[bored],[sarcastically]oder sogar[like dracula]) experimentieren, um zu sehen, wie sich die Ausgabe ändert.Nicht englischsprachiger Text-Prompt: Wenn Ihr Text-Prompt nicht auf Englisch ist, sollten Sie für optimale Ergebnisse trotzdem englische Audio-Tags verwenden.
Beispielprompt:
I have a secret to tell you. [whispers] I found the hidden treasure. [laughs] I can't believe it!
Beschränkungen und Anforderungen
Beachten Sie die folgenden Einschränkungen und Anforderungen, wenn Sie die Sprachgenerierung verwenden:
Die Konfiguration für mehrere Sprecher unterstützt genau zwei Sprecher.
Die folgenden Funktionen werden nur bei Verwendung der Gemini 3.x TTS-Modelle unterstützt: Streaming, Audio-Tags und zusätzliche automatisch erkannte Sprachen.
Einschränkungen für gemini-3.1-flash-tts-preview
- Inkonsistente Stimme: Die Ausgabe des Modells stimmt möglicherweise nicht immer genau mit dem ausgewählten Sprecher überein, wenn der Ton und der Kontext Ihres Prompts nicht mit dem Profil des Sprechers übereinstimmen (z. B. eine tiefe männliche Stimme, die versucht, wie ein junges Mädchen zu sprechen). Achten Sie darauf, dass der Kontext des Prompts zur Stimme passt.
- Längere Ausgaben: Bei Audioinhalten, die länger als ein paar Minuten sind, können die Sprachqualität und die Konsistenz abnehmen. Wir empfehlen, lange Text-Prompts in kleinere Teile aufzuteilen.
- Gelegentliche Rückgabe von Text-Tokens: Das Modell gibt gelegentlich Text-Tokens anstelle von Audio-Tokens zurück, was dazu führt, dass die Anfrage mit einem
500-Fehler fehlschlägt. Da dies zufällig bei einem kleinen Prozentsatz von Anfragen auftritt, sollten Sie in Ihrer Anwendung eine Wiederholungslogik implementieren. - Falsche Ablehnungen durch den Klassifikator: Vage Prompts können dazu führen, dass der Klassifikator für die Sprachsynthese fehlschlägt. Das kann dazu führen, dass die Anfrage abgelehnt wird (
PROHIBITED_CONTENT) oder das Modell Ihre Stilanweisungen laut vorliest. Um dies zu vermeiden, verwenden Sie einen strukturierten Prompt mit einer klaren Präambel (z. B.Audio ProfileundDirector's Notes) am Anfang des Prompts.
Unterstützte Stimmen und Sprachen
Die Gemini-TTS-Modelle nehmen Texteingaben entgegen und generieren Audioausgaben. Die Antwort ist also die synthetisierte Sprache selbst. In den folgenden Abschnitten sind die unterstützten Stimmen und Sprachen aufgeführt, die die Gemini-TTS-Modelle „sprechen“ (oder in denen sie antworten) können.
Die Stimmen sind mehrsprachig. Das bedeutet, dass Sie dieselbe Stimme verwenden können, um Sprache in einer der unterstützten Sprachen zu generieren. Sie können die Stimme beispielsweise auf Kore festlegen und eine Reihe von Text-Prompts auf Spanisch, Hindi und Vietnamesisch senden. Die Antworten werden alle in der Kore-Stimme, aber in den verschiedenen Sprachen ausgegeben.
Namen der Stimmen
Die Gemini-TTS-Modelle unterstützen 30 verschiedene synthetisierte HD-Stimmen, die jeweils eigene Merkmale haben. Wenn Sie den Abschnitt unten maximieren, können Sie sich eine Liste der Sprachoptionen für Antworten ansehen und Demos der einzelnen Stimmen anhören.
Sprachen
Die Gemini-TTS-Modelle können die folgenden Sprachen in Ihrem Text-Prompt automatisch erkennen. Die generierte Sprache wird in dieser Sprache ausgegeben.
Sie können in Ihrer Sprachkonfiguration optional explizit einen Sprachcode festlegen.
Von allen Audiogenerierungsmodellen unterstützte 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-Bundle | Marathi (Indien) | mr-IN |
| Tamil (Indien) | ta-IN | Telugu (Indien) | te-IN |
Zusätzliche Sprachen, die von Audiogenerierungsmodellen der Version 3.x unterstützt werden
| Sprache | BCP-47-Code | Sprache | BCP-47-Code |
|---|---|---|---|
| Afrikaans | af | Filipino | fil |
| Albanisch | sq | Finnisch | fi |
| Amharisch | vormittags | Galizisch | gl |
| Armenisch | hy | Georgisch | ka |
| Aserbaidschanisch | az | Griechisch | el |
| Baskisch | eu | Gujarati | gu |
| Belarussisch | be | Haitianisch | ht |
| Bulgarisch | bg | Hebräisch | er |
| Burmesisch | mein | Ungarisch | hu |
| Katalanisch | Zertifizierungsstelle | Isländisch | ist |
| Cebuano | ceb | Javanisch | jv |
| Chinesisch (Mandarin) | cmn | Kannada | kn |
| Kroatisch | Std. | Konkani | kok |
| Tschechisch | cs | Lao | lo |
| Dänisch | da | Latein | la |
| Estnisch | et | Lettisch | lv |
| Litauisch | lt | Luxemburgisch | lb |
| Mazedonisch | mk | Maithili | mai |
| Malagasy | mg | Malaiisch | ms |
| Malayalam | ml | Mongolisch | mn |
| Nepalesisch | ne | Norwegisch (Bokmål) | nb |
| Norwegisch (Nynorsk) | nn | Oriya | oder |
| Paschtu | ps | Persisch | fa |
| Punjabi | pa | Serbisch | sr |
| Sindhi | sd | Singhalesisch | si |
| Slowakisch | sk | Slowenisch | sl |
| Swahili | sw | Schwedisch | sv |
| Urdu | ur |
(Optional) Sprachcode explizit festlegen
Wenn Sie in Ihrer Sprachkonfiguration keinen Sprachcode angeben, erkennt das Modell die Sprache in Ihrem Text-Prompt automatisch.
Sie können die Sprache jedoch optional explizit festlegen (mit dem Parameter languageCode in der Sprachkonfiguration). Dazu müssen Sie einen der folgenden unterstützten BCP-47-Sprachcodes verwenden:
- Arabisch:
ar-XA - Bengalisch:
bn-IN - Chinesisch (Mandarin):
cmn-CN - Niederländisch:
nl-NL - Englisch:
en-US,en-GB,en-AU,en-IN - Französisch:
fr-FR,fr-CA - Deutsch:
de-DE - Gujarati:
gu-IN - Hindi:
hi-IN - Indonesisch:
id-ID - Italienisch:
it-IT - Japanisch:
ja-JP - Kannada:
kn-IN - Koreanisch:
ko-KR - Malayalam:
ml-IN - Marathi:
mr-IN - Polnisch:
pl-PL - Portugiesisch:
pt-BR - Russisch:
ru-RU - Spanisch:
es-US,es-ES - Tamil:
ta-IN - Telugu:
te-IN - Thailändisch:
th-TH - Türkisch:
tr-TR - Vietnamesisch:
vi-VN
Was kannst du sonst noch alles für mich tun?
- Tokens zählen, bevor Sie lange Prompts an das Modell senden.
-
Beginnen Sie mit der Vorbereitung für die Produktion (siehe Produktionscheckliste):
- Erzwingen Sie Firebase App Check so früh wie möglich, um die Gemini API vor Missbrauch durch nicht autorisierte Clients zu schützen.
- Verwenden Sie Firebase Remote Config oder Server-Prompt-Vorlagen, um on demand Änderungen an den Konfigurationen für Ihre KI-Funktion (z. B. Modellname) vorzunehmen, ohne eine neue Version Ihrer App veröffentlichen zu müssen.
Andere Funktionen ausprobieren
- Multi-Turn-Unterhaltungen (Chat) erstellen
- Text aus reinen Text-Prompts generieren.
- Strukturierte Ausgabe (z. B. JSON) aus Text- und multimodalen Prompts generieren.
- Bilder aus Text- und multimodalen Prompts generieren und bearbeiten
- Streamen Sie die Eingabe und Ausgabe (einschließlich Audio) mit dem Gemini Live API.
-
Verwenden Sie Tools wie Funktionsaufrufe und Fundierung mit
Google Search oderGoogle Maps , um ein Gemini-Modell mit anderen Teilen Ihrer Anwendung sowie mit externen Systemen und Informationen zu verbinden.
Informationen zum Steuern der Inhaltsgenerierung
- Prompt-Design verstehen, einschließlich Best Practices, Strategien und Beispiel-Prompts.
- Modellparameter konfigurieren, z. B. maximale Ausgabetokens, die Wahrscheinlichkeit wiederholter Ausgabetokens usw.
- Verwenden Sie Sicherheitseinstellungen, um die Wahrscheinlichkeit anzupassen, dass Sie Antworten erhalten, die als schädlich eingestuft werden könnten.
Weitere Informationen zu den unterstützten Modellen
Informieren Sie sich über die Modelle, die für verschiedene Anwendungsfälle verfügbar sind, sowie über die zugehörigen Kontingente und Preise.Feedback zu Ihren Erfahrungen mit Firebase AI Logic geben