アプリ内でAndroidのテキスト読み上げ機能を使う

英語学習ソフトを作ったのだけど、どう読むのかわからなかったのでテキスト読み上げ機能を追加してみた。

使い方

テキストの読み上げにはTextToSpeechを使う

public class MainActivity extends BaseActivity {

    private TextToSpeech textToSpeech;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flick_card);

        // 第2引数はTextToSpeech.OnInitListener
        // 初期化が終わるとonInitが呼ばれる
        textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (TextToSpeech.SUCCESS == status) {
                    // 今回は英語読み上げだから英語が使えるかを確認
                    if (textToSpeech.isLanguageAvailable(Locale.ENGLISH) >= TextToSpeech.LANG_AVAILABLE) {
                        // 英語が使えるなら読み上げ言語を英語にする
                        textToSpeech.setLanguage(Locale.ENGLISH);

                        // speakで読み上げ
                        textToSpeech.speak("word", textToSpeech.QUEUE_FLUSH, null);
                    }
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        // 終了時はtextToSpeechを終了させる
        // これやらないとエラーがでる
        if (textToSpeech != null) {
            textToSpeech.stop();
            textToSpeech.shutdown();
        }
        super.onDestroy();
    }
}

まとめ

非常に簡単。ただ読み上げる声が電子音で怖い・・・。端末ごとに読み上げに使用する音声ファイルが違うので問題ない端末は人がしゃべっているように聞こえるから端末依存でしょうがないんだろうなぁ。単語の読み上げ機能が追加された「Swipe Card」。良かったら使ってね。