В макет добавляем:
<EditText
android:id="@+id/text"
android:text=""
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:textColor="#000000"
android:background="#FFFFFF"
android:textSize="16sp"
android:maxLines="1"
android:maxLength="50"
/>
<Button
android:id="@+id/bSpeech"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Прослушать" />
Код Java может быть следующим
package com.hfadgh.mypackage;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.Locale;
public class M_Activity extends AppCompatActivity implements TextToSpeech.OnInitListener {
private Button bSpeech;
private TextToSpeech tts; private int SUCCESS_S=0;
private EditText text;
//переменная для проверки данных для TTS
private int MY_DATA_CHECK_CODE=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_m_activity);
bSpeech = (Button) findViewById(R.id.bSpeech);
bSpeech.setEnabled(false);
text = (EditText) findViewById(R.id.text);
//tts = new TextToSpeech(getApplicationContext(), this);
//подготовка движка TTS для проговаривания слов
Intent checkTTSIntent=new Intent();
//проверка наличия TTS
checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
//запуск checkTTSIntent интента
startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
//tss код здесь
//вызываем метод родительского класса
super.onActivityResult(requestCode, resultCode, data);
//returned from TTS data check
if(requestCode== MY_DATA_CHECK_CODE) {
//все необходимые приложения установлены, создаем TTS
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
//repeatTTS = new TextToSpeech(this, this);
tts = new TextToSpeech(getApplicationContext(), this);
//движок не установлен, предположим пользователю установить его
else {
//интент, перебрасывающий пользователя на страницу TSS в Google Play
Intent installTTSIntent = new Intent();
installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installTTSIntent);
}
}
}
@Override
public void onStop(){
super.onStop();
// tts.shutdown();
}
@Override
protected void onDestroy() {
super.onDestroy();
if(tts != null){tts.shutdown();}
}
@Override
public void onInit(int status){ // добавим метод onInit, который вызывается при успешной инициализации TTS
if(status ==TextToSpeech.SUCCESS){
bSpeech.setEnabled(true);
if(tts != null) {
tts.setLanguage(Locale.UK);//Язык
SUCCESS_S = 1;
}
}}
//@Override
public void onClick(View v){
// TextToSpeech.QUEUE_FLUSH — флаг, обозначающий, что при добавлении новой фразы текущую необходимо прервать и начать воспроизведение добавленной.
// Если вы хотите составить очередь из фраз, следует использовать вместо этого флаг TextToSpeech.QUEUE_ADD;
if(SUCCESS_S == 1) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
tts.speak(text.getText().toString(), TextToSpeech.QUEUE_FLUSH, null, null);
} else {
tts.speak(text.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
}
}
}
}
Осталось настроить синтез речи на вашем устройстве. Он может быть отключен.
Возможно нужно будет еще установить "голосовой пакет" - К примеру "Английский (Великобритания)".
На некоторых брендовых устройствах может быть несколько вариантов синтеза речи. Скорее лучше выбрать родной Гугловский.
Программа уже готова к использованию. В программе есть кнопка прослушивания набранного в поле английского текста.
Вы можете настроить синтез с другого языка.
Подписывайтесь на канал, не пропустите новые публикации.