Es un proyecto que convierte el texto en voz utilizando la clase TextTospeech proporcionada por Google.
Es el constructor más predeterminado TextToSpeech(Context context, TextToSpeech.OnInitListener listener) . Hay un constructor que puede establecer el motor TTS, pero decidí omitirlo.
InitListener se describirá a continuación.
private TextToSpeech textToSpeech;
@Override
protected void onCreate(Bundle savedInstanceState) {
textToSpeech = new TextToSpeech(this, initListener);
}
//음성 재생 상태에 대한 callback을 받을 수 있는 추상 클래스
private UtteranceProgressListener progressListener = new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) { // 음성이 재생되었을 때
}
@Override
public void onDone(String utteranceId) { // 제공된 텍스트를 모두 음성으로 재생한 경우
}
@Override
public void onError(String utteranceId) { // ERROR!
}
};
textToSpeech.setOnUtteranceProgressListener(progressListener);
setLanguage() a continuación puede establecer el lenguaje de habla. Puede seleccionar la voz requerida de acuerdo con la situación, como locale.english, locale.canada.
//음성 관련 초기화 상태에 대한 callback을 받을 수 있는 인터페이스
private TextToSpeech.OnInitListener initListener = new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR)
textToSpeech.setLanguage(Locale.KOREAN); // 한글로 설정
}
};
Antes de explicar, 'UtteranceID' indica un valor de identificación para la voz que se está reproduciendo actualmente. Parece ser útil al controlar múltiples voz.
El método speak(String text, int queueMode, HashMap<String, String> params) se ha desapercido del nivel API del nivel 21. Por lo tanto, en línea con el nivel API, use el nuevo método speak(CharSequence text, int queueMode, Bundle params, String utteranceId) como sigue.
String text = editText.getText.toString();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
String myUtteranceID = "myUtteranceID";
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, myUtteranceID);
}
else {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "myUtteranceID");
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, hashMap);
}
Simplemente use un método como textToSpeech.stop() para la parada en la voz que se está reproduciendo actualmente.
TextTospeech inicializado instantáneo a través del motor del habla debe finalizarse por completo a través de textToSpeech.shutDown() . O seviceconnection ... tengo una excepción.
ex. En el caso de la actividad como se muestra a continuación, puede llamar a shutDown() para que coincida con el ciclo de vida.
@Override
protected void onDestroy() {
if(textToSpeech != null)
textToSpeech.shutDown();
super.onDestroy();
}
El proyecto creó una clase TTS y hizo que sea más fácil de usar. Después de eso, el proyecto se agregará al proyecto.
