您可以要求 Gemini TTS 模型根据文本提示生成语音(音频)输出。使用 Firebase AI Logic 时,您可以直接从应用中发出此请求。
文字转语音 (TTS) 生成是可控的,这意味着您提供要合成语音的确切文本。此外,您还可以在提示中使用自然语言来指导音频输出的风格、口音、语速和语气。 您可以将 TTS 视为转写(语音转文字)的逆向过程。
此功能适用于任何 Gemini -tts 模型,这些模型经过优化,可生成高质量、低延迟的语音。
借助此功能,您可以执行以下操作:
互动式故事讲述:创建沉浸式有声读物或角色扮演游戏,让模型为不同的角色切换声音,或调整语气(例如在悬念时低声细语,或在听到笑话时大笑),以贴合叙事内容。
语言学习:构建发音指南,该指南可以采用特定的地区口音或以较慢的速度朗读文本,帮助学习者练习难以发音的词语。
可感知上下文的内容阅读器:使用与内容相符的语音角色和情感基调(例如,使用严肃的语气朗读突发新闻,或使用温暖而耐心的语气朗读分步烹饪说明)大声朗读新闻报道、食谱或博文。
本指南介绍了如何使用单发言人或多发言人从文本输入生成语音,以及如何流式传输音频响应。
跳转到单音箱的代码 跳转到多音箱的代码 跳转到流式响应的代码
TTS 与 Live API 之间的比较
文字转语音 (TTS) 模型和 Live API 模型都是低延迟的语音生成模型,可以配置为使用不同的回答声音和语言。不过,它们的应用场景截然不同。
文字转语音 (TTS) 生成是一种单向的请求-响应交互(输入文字,输出音频)。它专为需要准确朗读所提供文本并对风格和声音进行精细控制的场景而量身打造,例如播客旁白、有声读物或朗读文章。
Live API 生成支持 双向流式传输,可实现实时语音对话(语音输入、 语音输出)。它擅长处理动态对话上下文,在这种情况下,模型会决定要返回的适用语音。请注意,最新的 Live API 模型还支持视频和图片输入。
准备工作
|
点击您的 Gemini API 提供商,以查看此页面上特定于提供商的内容和代码。 |
如果您尚未完成入门指南,请先完成该指南。该指南介绍了如何设置 Firebase 项目、将应用连接到 Firebase、添加 SDK、为所选的 Gemini API 提供方初始化后端服务,以及创建 GenerativeModel 实例。
如需测试和迭代提示,我们建议使用 Google AI Studio。
支持此功能的模型
gemini-3.1-flash-tts-preview
根据文本生成语音
您可以使用 Gemini TTS 模型根据提供的文本生成语音。
生成包含单个发言人的语音
|
在试用此示例之前,请完成本指南的准备工作部分,以设置您的项目和应用。 在该部分中,您还需要点击所选Gemini API提供商对应的按钮,以便在本页上看到特定于提供商的内容。 |
您可以将模型配置为使用单一声音输出音频。
在您的 GenerationConfig 中,添加以下内容:
将
responseModalities设置为包含AUDIO。配置具有以下内容的
SpeechConfig:(必需) 回答语音名称(例如
Kore)(可选) 语言代码。
如果您未指定语言,Gemini TTS 模型可以自动检测提示中的语言。
使用文本提示调用 generateContent。模型会在响应部分中返回原始 PCM 音频数据。
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
对于 Kotlin,此 SDK 中的方法是挂起函数,需要从 Coroutine 范围调用。
// 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
对于 Java,此 SDK 中的流式传输方法会返回 Reactive Streams 库中的Publisher 类型。
// Set `responseModalities` to include `AUDIO`.
// Configure a `SpeechConfig` with your chosen voice name (and optionally a language code).
GenerationConfig