TextToSpeechを使ったテキストの読み上げ

入力されたテキストなどを読み上げたい場合などにはTextToSpeechクラス(APIレベルは4以上)を利用します。

例えば、ボタンが押されたら挨拶するようにしたい場合には次のようなコードを書きます。

public class MainActivity extends Activity 
    implements TextToSpeech.OnInitListener
{

    private TextToSpeech tts;
    private float pitch = 1.0f;
    private float rate = 1.0f;

   public void onCreate(Bundle savedInstanceState) 
   {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        tts = new TextToSpeech(this, this);
            //新たにTextToSpeechインスタンスを生成

        Button speechButton = (Button)findViewById(R.id.speech_button);
        speechButton.setOnClickListener(new View.onClickListener()
        {
            @Override
            public  void onClick(View v) 
            {
                tts.setPitch(pitch);
                tts.setSpeechRate(rate);
                if(tts.isSpeaking()){    
                    //まだ読み上げている途中ならそれが終わるまで待つ
                    tts.stop();
                }
                tts.speak("hello!!", TextToSpeech.QUEUE_FLUSH, null);
                    //読み上げ開始
            }
        });
    }

    //TextToSpeechの初期化
    @Override
    public void onInit(int status) 
    {
        if(status == TextToSpeech.SUCCESS){
            Locale locale = Locale.ENGLISH;
            tts.setLanguage(locale);
                //英語を読み上げ言語に設定
        }else{
            //初期化に失敗したときの処理
        }
    }
}

この例ではボタンが押されるたびに"hello!!"と英語で音声出力するようにしています。

また、もし連続でボタンが押されたとしても読み上げ途中なら次の読み上げまで待機させています。

初期化をするときはTextToSpeech.OnInitListenerを実装すればonInitメソッドで読ませたい言語などを設定できます。

テキストを入力するだけで読み上げてくれるので便利ですが、TextToSpeechの読み上げエンジンは「英語/フランス語/イタリア語/ドイツ語/スペイン語」の5種類にしか対応していません。

なので、日本語にも対応させたい場合はJapaneseTextToSpeech(JTTS)などの専用のライブラリを導入する必要があります。

関連項目
プライバシーポリシー