базовое приложение для преобразования текста в речь не работает - PullRequest
2 голосов
/ 12 июня 2010

Я попробовал следующее на эмуляторе, но при запуске приложения выдает ошибку времени выполнения. Может кто-нибудь, пожалуйста, помогите мне в этом. Вот код, который я попробовал

package com.example.TextSpeaker;

import java.util.Locale;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;

public class TextSpeaker extends Activity {
/** Called when the activity is first created. */
int MY_DATA_CHECK_CODE = 0;
private TextToSpeech mtts;
String test1="hello world";
String test2="hi i am working fine";
    @Override

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent myintent = new Intent();
    myintent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(myintent, MY_DATA_CHECK_CODE);
}
    protected void onActivityResult(int requestcode,int resultcode,Intent data)
    {
        if(requestcode == MY_DATA_CHECK_CODE)
        {
            if(resultcode==TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
            {
                // success so create the TTS engine
                mtts = new TextToSpeech(this,(OnInitListener) this);
                mtts.setLanguage(Locale.ENGLISH);
                mtts.speak(test1, TextToSpeech.QUEUE_FLUSH, null);
                mtts.speak(test2, TextToSpeech.QUEUE_FLUSH, null);
            }
            else
            {
                //install the Engine
                Intent install = new Intent();
                install.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(install);
            }
        }

    }


}

1 Ответ

0 голосов
/ 14 октября 2011

Я наткнулся на этот вопрос более чем через год после того, как он был опубликован, но я все равно продолжу и отвечу, надеясь, что это поможет кому-нибудь еще, кто окажется здесь в будущем.

Я пишу это против 2.1, поэтому извиняюсь, если вы работали с <2.1 (нет меток на вопрос) </p>

Есть несколько вещей, которые я могу заметить сразу, которые могут вас немного расстроить.

Во-первых, следующее:

mtts.speak(test1, TextToSpeech.QUEUE_FLUSH, null);
mtts.speak(test2, TextToSpeech.QUEUE_FLUSH, null);

Если я правильно понимаю TextToSpeech API , использование QUEUE_FLUSH приведет к удалению всего, что в данный момент говорится, поэтому возможно, чтовторая строка исполняется до того, как первая произнесет речь, и вы услышите то, о чем говорите выше, что говорят только последнюю.

В идеале, вам нужна только одна из этих строк,если пользователь вводит другую строку, то просто пропустите ее и дайте ей вымыться.

Затем вы должны инвестировать в переопределение onDestroy, здесь вы можете отключить мОбъект tts, это предотвращает использование вашего приложения движком TTS, всегда приятно высвобождать ресурсы, когда вы закончите с ними, вы бы не оставили ResultSet открытым, не так ли?!

@Override
    public void onDestroy
            () {
        // Don't forget to shutdown!
        if (mTts != null) {
            mTts.stop();
            mTts.shutdown();
        }

        super.onDestroy();
    }

Кроме того, как вы заявляете, он будет говорить только по-английски из-за строки, которую вы используете:

mtts.setLanguage(Locale.ENGLISH);

Это легко исправить, просто установите другую локаль.Возможно, есть несколько кнопок и соответственно установите локаль.Я полагаю, что движок Google TTS в настоящее время поддерживает только английский, французский, немецкий, итальянский и испанский языки, но сторонние движки TTS могут предложить больше.

Если ничего не помогает, я написал здесь учебник это может быть полезно.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...