Kotlinで合成音声を出力するアプリを作成[Android]

合成音声を出力するサンプルアプリを作成しました。

こんにちは、tomoです。

Androidで合成音声を出力するアンプルアプリを作成しました。この動画のようなアプリです。


ソースコードを載せておくので参考にしてください。

ソースコード

合成音声を出力するのに「TextToSpeech」というAPIを使用します。

参考 TextToSpeechAndroidドキュメント

MainActivity.kt

「TextToSpeech」を使用するにはOnInitListenerインターフェースを継承します。onInitに初期化処理を実装します。

class MainActivity : AppCompatActivity(),View.OnClickListener,TextToSpeech.OnInitListener{
    private var tts : TextToSpeech? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // TextToSpeech初期化
        tts = TextToSpeech(this,this)
    }

    override fun onClick(view: View){
        var text = speechText.text.toString()

        SpeechText(text)
    }

    override fun onInit(status: Int){
        if(status == TextToSpeech.SUCCESS){
            Log.d("tts","TextToSpeech初期化成功")

            val listener = object : UtteranceProgressListener(){
                var tag : String = "TTS"
                override fun onDone(utteranceId: String?) {
                    Log.d(tag,"音声再生が完了しました。")
                }
                override fun onError(utteranceId: String?) {
                    Log.d(tag,"音声再生中にエラーが発生しました。")
                }
                override fun onError(utteranceId: String?, errorCode: Int) {
                    Log.d(tag,"音声再生中にエラーが発生しました。")
                }
                override fun onStart(utteranceId: String?) {
                    Log.d(tag,"音声再生を開始します。")
                }
                override fun onStop(utteranceId: String?, interrupted: Boolean) {
                    Log.d(tag,"音声再生を中止します。")
                }
                override fun onBeginSynthesis(utteranceId: String?, sampleRateInHz: Int, audioFormat: Int, channelCount: Int) {
                    Log.d(tag,"音声の合成を開始します。")
                }
                override fun onAudioAvailable(utteranceId: String?, audio: ByteArray?) {
                    Log.d(tag,"音声が利用可能になりました。")
                }
            }
            // イベントリスナを登録
            tts?.setOnUtteranceProgressListener(listener)
        }else{
            Log.d("tts","TextToSpeech初期化失敗")
        }
    }

    private fun SpeechText(text:String){
        tts?.setLanguage(Locale.JAPANESE)
        tts?.speak(text,TextToSpeech.QUEUE_FLUSH,null,"ID")
    }
}

その他のソースコード

その他のソースコードはGitHubに公開しています。ぜひ参考にしてください。

参考 サンプルコードGitHub

参考サイト

こちらのサイトを参考にさせていただきました。

参考 KotlinでTextToSpeechRE:ENGINES

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA