自分で開発しているAndroidアプリにて、日本語の音声読み上げを実装しようと思ったら、「アンドロイドで日本語音声出力(TextToSpeech):音声読み上げ」のページにあるように、KDDIが開発している「N2 TTS」がインストールされて、その端末のデフォルトの音声読み上げエンジンとして設定されていれば、プログラムの実装はめちゃくちゃ簡単です。
TextToSpeech型のインスタンスを取得してさえいれば、後はこいつのspeakメソッドに読み上げたい文字列を渡すだけです。
ですが、前提条件として、前述したKDDI作の「N2 TTS」がインストールされており、音声読み上げエンジンとして設定されていなければなりません。
もし設定されていない場合は、デフォルトの音声読み上げエンジン「Googleテキスト読み上げエンジン」が使われます。
この音声読み上げエンジンは、日本語がサポートされていませんので、このエンジンが使用されている場合は、日本語の文字列を渡して読み上げさせたくないですよね。
その端末の音声読み上げエンジンが何に設定されているか?という情報をあらかじめ知っておけば、「日本語対応エンジンなら音声読み上げる。それ以外は処理しない。」というような処理が行えます。
その方法は以下になります。
―――― onCreate()一部抜粋 ――――――――――――――――――
// TextToSpeechインスタンス生成
TTSListener ttsListener = new TTSListener();
TextToSpeech tts = new TextToSpeech(this, ttsListener);
――――――――――――――――――――――――――――――――――――――――――――
private class TTSListener implements OnInitListener{
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
if(“jp.kddilabs.n2tts”.equals(tts.getDefaultEngine())){
isReadyTextToSpeech = true;
}
}
}
}
※変数名の宣言の仕方は、適宜調整して下さい。上記は一部分のみの切り出しなのでご容赦下さい。
TextToSpeechのgetDefaultEngine()メソッドを用いると、その端末のデフォルトの音声読み上げエンジンのパッケージ名が返されます。
「N2 TTS」の場合はパッケージ名が「jp.kddilabs.n2tts」となっていますので、それと比較してやればOKです。
TextToSpeechのgetDefaultLanguage()やgetLanguage()というメソッドもありまして、これを使えば同じような事が出来るかもしれませんが、現在フリーで公開されてる日本語音声読み上げエンジンとしては「N2 TTS」ぐらいかな?と思いますので、ちょっと泥臭いやり方ではありますが、現状はこのやり方でよいかと思います。
今後も色んな音声読み上げエンジンが出てきてくれると嬉しいですね。