Với API Chuyển văn bản sang lời nói GenAI của Bộ công cụ học máy, bạn có thể tổng hợp nội dung văn bản thành âm thanh lời nói. API Chuyển văn bản sang lời nói sử dụng mô hình AI tạo sinh để cung cấp khả năng tổng hợp lời nói chất lượng cao.
Bạn nên sử dụng API Chuyển văn bản sang lời nói của Bộ công cụ học máy khi có thể vì API này cung cấp giọng nói rất giống con người. Tuy nhiên, nếu không có API này, bạn có thể sử dụng API TextToSpeech của nền tảng Android.
Các chức năng chính
- Các lựa chọn tải xuống và suy luận hợp nhất trong một SDK duy nhất.
- API ưu tiên Kotlin sử dụng coroutine và Flow để truyền trực tuyến trạng thái phát và âm thanh.
Điều kiện tiên quyết
Để sử dụng API chuyển văn bản sang lời nói, bạn phải đáp ứng các yêu cầu sau:
- Bạn có một trong các thiết bị được hỗ trợ sau đây:
- Google: Pixel 8, Pixel 9, Pixel 10, Pixel 11
- Samsung: Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
- Bạn đang dùng phiên bản mới nhất của
ứng dụng Nhận dạng và tổng hợp lời nói
(
com.google.android.tts) trên Google Play. Nếu ứng dụng bị thiếu hoặc đã lỗi thời, thì khi triển khai tính năng chuyển văn bản sang lời nói, phương thứccheckStatus()sẽ trả vềFeatureStatus.UNAVAILABLE. - Dự án của bạn sử dụng phiên bản SDK tối thiểu (
minSdk) là 26 trở lên.
Bắt đầu
Để bắt đầu, hãy thêm phần phụ thuộc Chuyển văn bản sang lời nói của Bộ công cụ học máy vào tệp build.gradle.kts (hoặc build.gradle) cấp mô-đun:
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'
}
Tích hợp API chuyển văn bản sang lời nói
Để sử dụng Text to Speech API, hãy làm theo các bước sau:
- Khởi chạy ứng dụng: Tạo một thực thể ứng dụng
SpeechSynthesizerbằng cách truyền một đối tượng cấu hìnhSpeechSynthesizerOptions. Bạn chỉ cần một phiên bản ứng dụng khách duy nhất để hỗ trợ tất cả ngôn ngữ. Ngôn ngữ được chỉ định trong đối tượng tuỳ chọn chỉ xác định danh sách ngôn ngữ mặc định do phương thứcgetSupportedVoices()trả về. - Tải mô hình xuống: Kiểm tra xem giọng nói mục tiêu của bạn có sẵn hay không. Nếu trạng thái là
FeatureStatus.DOWNLOADABLE, hãy gọi phương thứcdownload()để tải mô hình giọng nói xuống thiết bị. - Tổng hợp nội dung: Tạo một đối tượng
SpeechSynthesizerRequestchứa văn bản đầu vào và giọng nói mục tiêu. Gọi phương thứcsynthesize()để tạo âm thanh, đồng thời thu thập thông tin cập nhật về trạng thái phát và các đoạn âm thanh.
// 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()
Giọng nói được hỗ trợ
API Chuyển văn bản sang lời nói của Bộ công cụ học máy hỗ trợ các giọng nói sau. Chọn giọng nói theo tên bằng thuộc tính VoiceInfo.name.
- star02: nữ, giọng trung
- star04: nam, giọng trung cao
- star05: nam, giọng trầm
- star08: nữ, giọng trầm
- star11: nam, giọng trung, nghe trẻ trung
- star12: nữ, giọng trung cao
- star13: nam, giọng trung
- star16: nữ, giọng trung trầm
Ngôn ngữ được hỗ trợ
API Chuyển văn bản sang lời nói của Bộ công cụ học máy hỗ trợ các ngôn ngữ sau:
- Tiếng Ả Rập (ar-XA)
- Tiếng Đan Mạch (da-DK)
- Tiếng Đức (de-DE)
- Tiếng Anh (en-GB)
- Tiếng Anh (en-US)
- Tiếng Tây Ban Nha (es-ES)
- Tiếng Tây Ban Nha (es-US)
- Tiếng Pháp (fr-CA)
- Tiếng Pháp (fr-FR)
- Tiếng Hindi (hi-IN)
- Tiếng Indonesia (id-ID)
- Tiếng Italy (it-IT)
- Tiếng Nhật (ja-JP)
- Tiếng Hàn (ko-KR)
- Tiếng Na Uy (nb-NO)
- Tiếng Hà Lan (nl-NL)
- Tiếng Ba Lan (pl-PL)
- Tiếng Bồ Đào Nha (pt-BR)
- Tiếng Nga (ru-RU)
- Tiếng Thuỵ Điển (sv-SE)
- Tiếng Thổ Nhĩ Kỳ (tr-TR)
Các vấn đề thường gặp khi thiết lập
Sau đây là một số vấn đề thường gặp và mẹo khắc phục sự cố:
| Vấn đề | Nguyên nhân có thể xảy ra | Cách khắc phục được đề xuất |
|---|---|---|
Danh sách giọng nói (từ phương thức getSupportedVoices()) đang trống. |
Thiết bị không được hỗ trợ hoặc ứng dụng Nhận dạng và tổng hợp lời nói bị thiếu hoặc đã lỗi thời. | Kiểm tra để đảm bảo thiết bị của bạn được hỗ trợ và cập nhật ứng dụng Nhận dạng và tổng hợp lời nói. |
Phương thức checkStatus() trả về FeatureStatus.UNAVAILABLE. |
Thiết bị không được hỗ trợ hoặc ứng dụng Nhận dạng và tổng hợp lời nói bị thiếu hoặc đã lỗi thời. | Kiểm tra để đảm bảo thiết bị của bạn được hỗ trợ và cập nhật ứng dụng Nhận dạng và tổng hợp lời nói. |
Phương thức checkStatus() trả về FeatureStatus.DOWNLOADABLE. |
Giọng nói chưa được tải xuống thiết bị. | Gọi phương thức download() và đợi phương thức này hoàn tất trước khi gọi phương thức synthesize(). |
| Quá trình tải xuống không thành công hoặc không tiến triển. | Không có kết nối mạng. | Hãy thử lại khi thiết bị có kết nối mạng. |