android.speech.tts.TextToSpeech でテキストを読み上げる最小限サンプル。
Githubのソースは AndroidStudio2.3.3 Basic Activityテンプレートが元。
app/build.gradle
:
compile 'com.android.support:appcompat-v7:24.+'
compile 'com.android.support:design:24.+'
:
としてAndroid2.3 以上に対応。ポイントは...▼
Githubのソースは AndroidStudio2.3.3 Basic Activityテンプレートが元。
app/build.gradle
:
compile 'com.android.support:appcompat-v7:24.+'
compile 'com.android.support:design:24.+'
:
としてAndroid2.3 以上に対応。ポイントは...▼
全ソースGithub
さらに応用アプリを考えると、発話完了のタイミングが必要。
全ソースGithub
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import java.util.Locale; import android.widget.Toast; import android.content.Context; import android.speech.tts.TextToSpeech; public class MainActivity extends AppCompatActivity{ private TextToSpeech textToSpeech; class Text2SpeechListener implements TextToSpeech.OnInitListener{ @Override public void onInit( int status ){ Context context = getApplicationContext(); if( TextToSpeech.SUCCESS==status ){ Locale locale = Locale.getDefault(); if( textToSpeech.isLanguageAvailable( locale ) >= TextToSpeech.LANG_AVAILABLE ){ textToSpeech.setLanguage( locale ); }else{ Toast.makeText( context, "need speech data " + locale.getDisplayName(), Toast.LENGTH_SHORT ).show(); } }else{ Toast.makeText( context, "need TextToSpeech Engine", Toast.LENGTH_SHORT ).show(); } } } public void onClickSpeek( View v ){ if( textToSpeech.isSpeaking() ){ textToSpeech.stop(); } textToSpeech.speak( "pen pineapple apple pen", TextToSpeech.QUEUE_FLUSH, null ); } @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar ); setSupportActionBar( toolbar ); textToSpeech = new TextToSpeech( this, new Text2SpeechListener() );//★ } @Override protected void onDestroy(){ super.onDestroy(); if( null != textToSpeech ){ textToSpeech.shutdown(); } } }ここまででスポーツウォッチなどが可能。
さらに応用アプリを考えると、発話完了のタイミングが必要。
全ソースGithub
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import java.util.Locale; import android.widget.Toast; import android.content.Context; import android.speech.tts.TextToSpeech; import java.util.HashMap; public class MainActivity extends AppCompatActivity{ private TextToSpeech textToSpeech; class Text2SpeechListener implements TextToSpeech.OnInitListener{ @Override public void onInit( int status ){ Context context = getApplicationContext(); if( TextToSpeech.SUCCESS==status ){ Locale locale = Locale.getDefault(); if( textToSpeech.isLanguageAvailable( locale ) >= TextToSpeech.LANG_AVAILABLE ){ textToSpeech.setLanguage( locale ); }else{ Toast.makeText( context, "need speech data " + locale.getDisplayName(), Toast.LENGTH_SHORT ).show(); } }else{ Toast.makeText( context, "need TextToSpeech Engine", Toast.LENGTH_SHORT ).show(); } Toast.makeText( context, "Ready TextToSpeech Engine", Toast.LENGTH_SHORT ).show(); //★音声合成の準備ができてから発話完了リスナーをセット textToSpeech.setOnUtteranceCompletedListener( new Text2SpeechOnUtteranceCompletedListener() ); } } class Text2SpeechOnUtteranceCompletedListener implements TextToSpeech.OnUtteranceCompletedListener{ @Override public void onUtteranceCompleted( final String utteranceId ){ runOnUiThread( new Runnable(){ @Override public void run(){ Toast.makeText( getApplicationContext(), "finish speech " + utteranceId , Toast.LENGTH_SHORT ).show(); } }); } } public void onClickSpeek( View v ){ if( textToSpeech.isSpeaking() ){ textToSpeech.stop(); } HashMapこれでニュース読み上げ君などが可能。hashMap = new HashMap (); hashMap.put( TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "KEY_PARAM_UTTERANCE_ID" ); textToSpeech.speak( "pen pineapple apple pen", TextToSpeech.QUEUE_FLUSH, hashMap );//★第3引数 } @Override protected void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar ); setSupportActionBar( toolbar ); textToSpeech = new TextToSpeech( this, new Text2SpeechListener() ); } @Override protected void onDestroy(){ super.onDestroy(); if( null != textToSpeech ){ textToSpeech.shutdown(); } } }