借助机器学习套件的生成式 AI 文字转语音 API,您可以将文本内容合成为语音音频。Text to Speech API 使用生成式 AI 模型提供高质量的语音合成。
我们建议您尽可能使用 ML Kit Text to Speech API,因为它能提供非常逼真的人声,但如果无法使用,您可以改用 Android 平台 TextToSpeech API。
主要功能
- 在单个 SDK 中提供统一的下载和推理选项。
- Kotlin 优先 API,使用协程和 Flow 来流式传输播放状态和音频。
前提条件
如需使用 Text-to-Speech API,您必须满足以下要求:
- 您拥有以下任一受支持的设备:
- Google:Pixel 8、Pixel 9、Pixel 10、Pixel 11
- 三星:Galaxy S25、Galaxy S26、Galaxy Z Fold8、Galaxy Z Fold8 Ultra、Galaxy Z Flip8
- 您使用的是从 Google Play 下载的最新版语音识别和语音合成应用 (
com.google.android.tts)。如果应用缺失或过时,则在实现文字转语音时,checkStatus()方法会返回FeatureStatus.UNAVAILABLE。 - 您的项目使用的最低 SDK (
minSdk) 版本为 26 或更高。
开始使用
首先,将机器学习套件文字转语音依赖项添加到模块级 build.gradle.kts(或 build.gradle)文件中:
Kotlin
dependencies {
// ML Kit GenAI TTS SDK
implementation("com.google.mlkit:genai-text-to-speech:1.0.0-alpha1")
}
Groovy
dependencies {
// ML Kit GenAI TTS SDK
implementation 'com.google.mlkit:genai-text-to-speech:1.0.0-alpha1'
}
集成 Text-to-Speech API
如需使用 Text-to-Speech API,请按以下步骤操作:
- 初始化客户端:通过传递
SpeechSynthesizerOptions配置对象来创建SpeechSynthesizer客户端实例。您只需要一个客户端实例即可支持所有语言。选项对象中指定的语言区域仅决定getSupportedVoices()方法返回的默认语言列表。 - 下载模型:检查目标语音是否可用。如果状态为
FeatureStatus.DOWNLOADABLE,请调用download()方法将语音模型下载到设备。 - 合成内容:构造一个包含输入文本和目标语音的
SpeechSynthesizerRequest对象。调用synthesize()方法以生成音频,并收集播放状态更新和音频块。
// Initialize the `SpeechSynthesizer` client.
// One client serves every language. `Locale.US` is only the default list locale.
val options = speechSynthesizerOptions(Locale.US)
val client = SpeechSynthesis.getClient(options)
// Query voices for multiple languages using the same client instance.
val englishVoice = client.getSupportedVoices().first() // Uses the default `Locale.US`
val frenchVoice = client.getSupportedVoices(Locale.FRANCE).first()
// Check and download a voice model (for example, the French voice model).
if (client.checkStatus(frenchVoice) == FeatureStatus.DOWNLOADABLE) {
client.download(frenchVoice).collect { status -> println("Download status: $status") }
}
// Construct the request.
// The `VoiceInfo` instance, `frenchVoice` here, determines the spoken language.
val request = SpeechSynthesizerRequest(
input = SpeechSynthesizerRequest.Input.Text("Bonjour tout le monde", frenchVoice),
audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
)
// Speak and collect streaming audio or status.
client.synthesize(request).collect { response ->
when (response) {
is SpeechSynthesizerResponse.StatusUpdate -> println("Playback status: ${response.status}")
is SpeechSynthesizerResponse.AudioAvailable -> println("Audio chunk: ${response.audio.size} bytes")
is SpeechSynthesizerResponse.Error -> println("Error: ${response.errorCode}")
}
}
// Release resources when done.
client.close()
支持的语音
机器学习套件 Text to Speech API 支持以下语音。使用 VoiceInfo.name 属性按名称选择语音。
- star02:女性,音调适中
- star04:男声,中高音
- star05:男声,音调较低
- star08:女性,音调较低
- star11:男声,音调适中,听起来较年轻
- star12:女性,中高音
- star13:男声,音调适中
- star16:女性,音调中等偏低
支持的语言
机器学习套件 Text to Speech API 支持以下语言区域:
- 阿拉伯语 (ar-XA)
- 丹麦语 (da-DK)
- 德语 (de-DE)
- 英语(英国)(en-GB)
- 英语 (en-US)
- 西班牙语 (es-ES)
- 西班牙语(es-US)
- 法语 (fr-CA)
- 法语 (fr-FR)
- 印地语 (hi-IN)
- 印度尼西亚语 (id-ID)
- 意大利语 (it-IT)
- 日语 (ja-JP)
- 韩语 (ko-KR)
- 挪威语 (nb-NO)
- 荷兰语 (nl-NL)
- 波兰语 (pl-PL)
- 葡萄牙语 (pt-BR)
- 俄语 (ru-RU)
- 瑞典语 (sv-SE)
- 土耳其语 (tr-TR)
常见设置问题
以下是一些常见问题和问题排查提示:
| 问题 | 可能的原因 | 建议的修复方法 |
|---|---|---|
语音列表(来自 getSupportedVoices() 方法)为空。 |
设备不受支持,或者“语音识别和合成”应用缺失或已过时。 | 检查您的设备是否受支持,并更新“语音识别和语音合成”应用。 |
checkStatus() 方法会返回 FeatureStatus.UNAVAILABLE。 |
设备不受支持,或者“语音识别和合成”应用缺失或已过时。 | 检查您的设备是否受支持,并更新“语音识别和语音合成”应用。 |
checkStatus() 方法会返回 FeatureStatus.DOWNLOADABLE。 |
该语音尚未下载到设备上。 | 调用 download() 方法,并等待其完成,然后再调用 synthesize() 方法。 |
| 下载失败或没有进度。 | 无网络连接。 | 请在设备联网后重试。 |