見出し画像

Android標準の音声合成に触れてみた

こんにちは。
ぽつぽです。

サンプルアプリを作ってみたので、今回はそのご紹介です。

今回作成したアプリは「あいさつアプリ」です。
機能は以下の通りです。
・時刻に応じて「おはよう」「こんにちは」「こんばんわ」を表示
・3カ国語対応(何故に笑)
・テキストをタップすると、3カ国語別々に発音する

と、まあ説明だけだと伝わりにくいので、
今回作成したアプリの動画を見ていただければ幸いです。

さて、あいさつアプリを作成する上で、調査したものは「音声合成」です。
簡単に言うと、テキストを読み上げてくれる機能です。

調べてみるとAndroidにもあるじゃないですか、「TextToSpeech」が。
ということで、ついでに「TextToSpeech」についてもご紹介いたします。

TextToSpeechとは

簡単にいうとテキストを読み上げてくれるもの。
設定したテキストを読み上げる機能になります。

ちょこっとコードを説明

まずは、TextToSpeechのインスタンスを生成から。

class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener {

   ...省略

   //region MARK: - private fields
   ...省略
   private lateinit var textToSpeechJP: TextToSpeech
   private lateinit var textToSpeechEN: TextToSpeech
   private lateinit var textToSpeechGER: TextToSpeech
   ...省略
   //endregion

   //region MARK: - activity lifecycle methods
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       ...省略
       // 第一引数にコンテキスト、第2引数にListener
       // Listenerは次のonInitListenerになる
       textToSpeechJP = TextToSpeech(this, this)
       textToSpeechEN = TextToSpeech(this, this)
       textToSpeechGER = TextToSpeech(this, this)
       ...省略
   }

   ...省略

}

リスナーの設定
onInitメソッドのstatusで結果が渡ってくるので、statusが正常にinitされたら言語を設定します。

override fun onInit(status: Int) {
    if (status == TextToSpeech.SUCCESS) {
        textToSpeechJP.language = Locale.JAPAN
        textToSpeechEN.language = Locale.ENGLISH
        textToSpeechGER.language = Locale.GERMANY
    }
}

テキスト
TextToSpeechのspeakメソッドを呼ぶことで読み上げができます。

/**
 * 発音を開始する
 *
 * @param textToSpeech TextToSpeech
 * @param text 読み上げる文言
 */
private fun startSpeak(textToSpeech: TextToSpeech, text: String) {
    textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, "utteranceId")
}

speakメソッドの引数の説明:
□text:
読み上げるテキストをセットします。

□queueMode:
以下のモードが選択できます。
・QUEUE_ADD
 → キューに追加され、順番に読み上げられる
・QUEUE_FLUSH
 → すぐに読み上げを開始

□params:
以下のパラメータが選択できます。nullも選択できます。
・KEY_PARAM_STREAM
 → オーディオストリームを変更する際に利用
・KEY_PARAM_VOLUME
 → 音のボリュームを調整するのに利用
・KEY_PARAM_PAN
 → 音の定位を調整するのに利用

□utteranceId: 固有の識別子

まとめ

さっくりとでしたが、いかがだったでしょうか?
今回はTextToSpeechのさわりの部分だけでしたので、
実際に使用するとなれば、もう少し考慮しないといけない部分もあります。

少しでも興味が湧いた方は、以下に詳しい説明が記載されているサイトがあるので、見ることをオススメいたします。

それでは、また次回です。
ありがとうございました マタネー

#参考資料