こんにちは、tomoです。
先日、合成音声を出力するサンプルアプリを作成しました。このサンプルアプリに少し機能を追加してみました。
多言語対応した合成音声を出力するアプリを作成しました。
作成したアプリはこのような感じです。
言語を選択し、出力したい音声を入力することで音声が出力されます。
追加したソースコード
スピナーにリスナークラスを登録しています。リスナークラスにはアイテムが選択された時の処理を記述しています。
private var selectLang :String = String()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val spinner = findViewById<Spinner>(R.id.language)
    // スピナーにリスナーを登録
    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
        // アイテムが選択された時
        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            val spinnerParent = parent as Spinner   
            selectLang = spinnerParent.selectedItem as String
        }
        // アイテムが選択されなかった
        override fun onNothingSelected(parent: AdapterView<*>?) {
            // DO NOTHING
        }
    }
}
選択されたスピナーの内容をもとにTextToSpeechの言語を設定します。
private fun SpeechText(text:String){
    SetLanguage()
    tts?.speak(text,TextToSpeech.QUEUE_FLUSH,null,"ID")
}
private fun SetLanguage(){
    when(selectLang){
        "日本語" -> {
            tts?.setLanguage(Locale.JAPANESE)
        }
        "英語" ->{
            tts?.setLanguage(Locale.ENGLISH)
        }
        "中国語" ->{
            tts?.setLanguage(Locale.CHINESE)
        }
        "フランス語" ->{
            tts?.setLanguage(Locale.FRENCH)
        }
        "イタリア語" ->{
            tts?.setLanguage(Locale.ITALIAN)
        }
        "ドイツ語" ->{
            tts?.setLanguage(Locale.GERMAN)
        }
        "韓国語" ->{
            tts?.setLanguage(Locale.KOREAN)
        }
    }
}
簡単な機能ですが追加してみました。いきなり難しい機能や高機能なアプリを作るよりも、簡単な機能を積み上げていくのが理解もできていい開発方法だと思います。
全体のソースコードはGitHubで確認してください。

