Найти тему
Making games is easy!

Программирование под Android. Подключение синтеза речи.

В макет добавляем:

<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 ttsprivate 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);
        }
    }

}
}

Осталось настроить синтез речи на вашем устройстве. Он может быть отключен.

Возможно нужно будет еще установить "голосовой пакет" - К примеру "Английский (Великобритания)".

На некоторых брендовых устройствах может быть несколько вариантов синтеза речи. Скорее лучше выбрать родной Гугловский.

Программа уже готова к использованию. В программе есть кнопка прослушивания набранного в поле английского текста.

Вы можете настроить синтез с другого языка.

Подписывайтесь на канал, не пропустите новые публикации.