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のさわりの部分だけでしたので、
実際に使用するとなれば、もう少し考慮しないといけない部分もあります。
少しでも興味が湧いた方は、以下に詳しい説明が記載されているサイトがあるので、見ることをオススメいたします。
それでは、また次回です。
ありがとうございました マタネー