GenAI Text to Speech API

借助机器学习套件的生成式 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,请按以下步骤操作:

  1. 初始化客户端:通过传递 SpeechSynthesizerOptions 配置对象来创建 SpeechSynthesizer 客户端实例。您只需要一个客户端实例即可支持所有语言。选项对象中指定的语言区域仅决定 getSupportedVoices() 方法返回的默认语言列表。
  2. 下载模型:检查目标语音是否可用。如果状态为 FeatureStatus.DOWNLOADABLE,请调用 download() 方法将语音模型下载到设备。
  3. 合成内容:构造一个包含输入文本和目标语音的 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() 方法。
下载失败或没有进度。 无网络连接。 请在设备联网后重试。