AndroidでTTS(Text to Speech)を使う
🗣️はじめに:Androidで文字を音声にするTTSとは?
AndroidのText to Speech(TTS)機能は、文字列を合成音声で読み上げる機能です。視覚障害者向けのアクセシビリティや、ナビアプリの音声案内、学習アプリの読み上げなど、幅広い分野で活用されています。
この記事では、AndroidでのTTSの導入方法から、設定・制御・多言語対応などの応用的な使い方までをまとめていきます。
🔧TTSの導入方法
📦1. 依存関係と準備
TTSはAndroid SDKに標準で含まれているため、特別なライブラリの導入は不要です。
必要なのは以下のインポートだけ:
import android.speech.tts.TextToSpeech
🧩2. 初期化の基本コード
TTSは非同期で初期化されるため、コールバックで状態を確認する必要があります。
class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener {
private lateinit var tts: TextToSpeech
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
tts = TextToSpeech(this, this)
}
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS) {
tts.language = Locale.JAPANESE
}
}
override fun onDestroy() {
tts.shutdown()
super.onDestroy()
}
}
🗣️TTSで文字を読み上げる
tts.speak("こんにちは、世界!", TextToSpeech.QUEUE_FLUSH, null, "utteranceId")
QUEUE_FLUSH
とQUEUE_ADD
の違い
-
QUEUE_FLUSH
: 現在の読み上げを止めて新しい読み上げを開始 -
QUEUE_ADD
: キューの最後に追加
utteranceId
は読み上げのトラッキングに使えます。読み上げ開始・終了のイベント検知にも活用できます。
⚙️TTSの応用設定
🗂️音声エンジンの選択
ユーザーの端末に複数のTTSエンジンがある場合、TextToSpeech.getEngines()
で一覧を取得できます。
val engines = tts.engines
engines.forEach { engine ->
Log.d("TTS_ENGINE", "name=${engine.name}, label=${engine.label}")
}
🧑🎤声の種類(ボイス)を選ぶ
API 21以上では、tts.voices
で利用可能なVoiceオブジェクト一覧を取得し、好みの声質を設定可能。
val voices = tts.voices
voices.forEach { voice ->
Log.d("TTS_VOICE", "name=${voice.name}, locale=${voice.locale}")
}
tts.voice = voices.first { it.locale == Locale.JAPANESE }
📣スピードやピッチの調整
tts.setSpeechRate(0.9f) // 標準は1.0
tts.setPitch(1.2f) // 高めの声に
🌐多言語対応と切り替え
TTSは多言語に対応しています。以下のように言語を切り替えることで、各国の読み上げが可能になります。
tts.language = Locale("en", "US")
tts.speak("Hello world", TextToSpeech.QUEUE_FLUSH, null, "id_en")
【警告】端末にその言語のTTSエンジンが入っていない場合、失敗する可能性があります。isLanguageAvailable()
で確認しましょう。
📱TTSのユースケース事例
🎓学習アプリでの単語読み上げ
ユーザーが単語リストをタップすると発音を聞けるように。英語学習アプリでの活用が多いです。
🗺️ナビアプリでの道案内
現在地や交差点の名前などをリアルタイムに読み上げ。Google Mapsでも使われている技術です。
🧑🦯アクセシビリティ
視覚障害者向けに、画面のテキストを読み上げる「TalkBack」もTTSを利用しています。
🧪TTSの制御・監視イベント
読み上げの開始・終了・エラー検知には、UtteranceProgressListener
を使います。
tts.setOnUtteranceProgressListener(object : UtteranceProgressListener() {
override fun onStart(utteranceId: String?) { Log.d("TTS", "開始") }
override fun onDone(utteranceId: String?) { Log.d("TTS", "終了") }
override fun onError(utteranceId: String?) { Log.e("TTS", "エラー") }
})
🧹TTS利用時の注意点
-
初期化完了前に
speak()
を呼ばないこと -
Activity破棄時には
shutdown()
を忘れずに -
ユーザーの設定や端末によっては音が出ないこともある(マナーモードなど)
アプリがバックグラウンド中にTTSを使う場合、通知やフォアグラウンドサービスとの連携も検討してください。
🧠おわりに:TTSをアプリに組み込む意義
AndroidのTTSは、標準機能として非常に強力でありながら、意外と活用されていない機能のひとつです。ユーザー体験を豊かにし、アクセシビリティを高め、学習・ナビ・教育・健康アプリなど多くの分野に応用できます。
あなたのアプリでも、「読ませてみる」という選択肢をぜひ一度検討してみてください。