TextToSpeech android构建版本不播放音频

时间:2014-11-13 14:06:20

标签: android audio text-to-speech

我在android上的文本到语音引擎有一个奇怪的行为:

当我在Galaxy S5上测试文字到语音时,一切都很好,音频以土耳其语和德语播放。

在其他一些手机上(例如一个LG)textToSpeech也可以正常工作 - 除了以下情况:

  1. 导出应用程序(构建apk)并在手机上手动安装
  2. 切换到土耳其语(德语一直有效!)
  3. 问题是我没有收到任何错误消息 - TTS似乎正常初始化。

    任何提示都会非常感激!

    这是我的代码:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getActionBar().setLogo(R.drawable.anne_eli_icons_pfeile_zurueck_weiss_17px);
            getActionBar().setHomeButtonEnabled(true);
            textToSpeech = new TextToSpeech(this, this);
        }
    
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                log("onInit()");
                int result = textToSpeech.setLanguage(new Locale(getTransLanguage()));
                log("result:" + result);
                textToSpeech.setSpeechRate(1.2f); // set speech speed rate
    
                if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                    Tools.showToast(this, "Language " + getTransLanguage() + " is not supported! Error code: " + result);
                    Intent installIntent = new Intent();
                    installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                    startActivity(installIntent);
    
                } else {
                    speechEnabled = true;
                }
    
            } else {
                speechEnabled = false;
                Tools.showToast(this, "Text to speech initialization failed!");
            }
        }
    

1 个答案:

答案 0 :(得分:0)

之前,检查TTS服务是否可用:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;

/**
 * This class demonstrates checking for a TTS engine, and if one is
 * available it will spit out some speak.
*/
public class Main extends Activity implements TextToSpeech.OnInitListener
{
private TextToSpeech mTts;
// This code can be any value you want, its just a checksum.
private static final int MY_DATA_CHECK_CODE = 1234;

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Fire off an intent to check if a TTS engine is installed
    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

}

/**
 * Executed when a new TTS is instantiated. Some static text is spoken via TTS here.
 * @param i
 */
public void onInit(int i)
{
    mTts.speak("Hello folks, welcome to my little demo on Text To Speech.",
            TextToSpeech.QUEUE_FLUSH,  // Drop all pending entries in the playback queue.
            null);
}


/**
 * This is the callback from the TTS engine check, if a TTS is installed we
 * create a new TTS instance (which in turn calls onInit), if not then we will
 * create an intent to go off and install a TTS engine
 * @param requestCode int Request code returned from the check for TTS engine.
 * @param resultCode int Result code returned from the check for TTS engine.
 * @param data Intent Intent returned from the TTS check.
 */
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == MY_DATA_CHECK_CODE)
    {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
        {
            // success, create the TTS instance
            mTts = new TextToSpeech(this, this);
        }
        else
        {
            // missing data, install it
            Intent installIntent = new Intent();
            installIntent.setAction(
                    TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
        }
    }
}

/**
 * Be kind, once you've finished with the TTS engine, shut it down so other
 * applications can use it without us interfering with it :)
 */
@Override
public void onDestroy()
{
    // Don't forget to shutdown!
    if (mTts != null)
    {
        mTts.stop();
        mTts.shutdown();
    }
    super.onDestroy();
}

}