ML Kit の GenAI Text to Speech API を使用すると、テキスト コンテンツを音声に合成できます。Text to Speech API は、生成 AI モデルを使用して高品質の音声合成を提供します。
ML Kit Text to Speech API は非常に人間らしい音声を提供するため、可能であればこの API を使用することをおすすめします。ただし、この API を使用できない場合は、代わりに Android プラットフォームの TextToSpeech API を使用できます。
主な機能
- 1 つの SDK 内に統合されたダウンロードと推論のオプション。
- コルーチンと Flow を使用して再生ステータスと音声をストリーミングする Kotlin ファーストの API。
前提条件
Text to Speech API を使用するには、次の要件を満たす必要があります。
- 以下のいずれかのサポート対象デバイスを使用している。
- Google: Google Pixel 8、Google Pixel 9、Google Pixel 10、Google Pixel 11
- Samsung: 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 以降を使用している。
始める
まず、ML Kit Text to Speech の依存関係をモジュール レベルの 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クライアント インスタンスを作成します。すべての言語をサポートするために必要なクライアント インスタンスは 1 つだけです。オプション オブジェクトで指定されたロケールは、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()
サポート対象の音声
ML Kit Text to Speech API は、次の音声をサポートしています。VoiceInfo.name プロパティを使用して、名前で音声を選択します。
- star02: 女性、中音域
- star04: 男性、中高音域
- star05: 男性、低音域
- star08: 女性、低音域
- star11: 男性、中音域、若々しい声
- star12: 女性、中高音
- star13: 男性、中音域
- star16: 女性、中低音
サポートされている言語
ML Kit 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() メソッドを呼び出します。 |
| ダウンロードが失敗する、または進行しない。 | ネットワーク接続がありません。 | デバイスがオンラインになったら、もう一度お試しください。 |