2014-09-13 32 views
1

我想在onc​​reate方法中将一些文本转换为语音。 这就是当活动开始时它会说一些文字。 我该怎么做?如何在Android中的OnCreate方法中启动TTS

我知道如何正常使用tts。 这些是示例代码。但是当活动开始时它不起作用。

public class AndroidTextToSpeechActivity extends Activity implements 
    TextToSpeech.OnInitListener { 
/** Called when the activity is first created. */ 

private TextToSpeech tts; 
private Button btnSpeak; 
private EditText txtText; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tts = new TextToSpeech(this, this); 

    btnSpeak = (Button) findViewById(R.id.btnSpeak); 

    txtText = (EditText) findViewById(R.id.txtText); 

    // button on click event 
    btnSpeak.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      speakOut(); 
     } 

    }); 
} 

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

@Override 
public void onInit(int status) { 

    if (status == TextToSpeech.SUCCESS) { 

     int result = tts.setLanguage(Locale.US); 

     if (result == TextToSpeech.LANG_MISSING_DATA 
       || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
      Log.e("TTS", "This Language is not supported"); 
     } else { 
      btnSpeak.setEnabled(true); 
      speakOut(); 
     } 

    } else { 
     Log.e("TTS", "Initilization Failed!"); 
    } 

} 

private void speakOut() { 

    String text = txtText.getText().toString(); 

    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
} 

}

+0

尝试将您的语音代码放入onResume方法当用户可以看到该活动并且可以与其交互时调用此方法 – 2014-09-13 17:35:37

回答

0

您的代码,只要它可能可以播放动态生成的讲话,因为你在onInit()方法调用 speakOut(),这是回调火灾时,文本到语音转换合成器已准备好使用。

如果您希望更快地生成语音,并且您事先知道要说出的短语以及说出它的语言环境,可以预生成合成语音,将其保存到WAV文件中,并在稍后再播放与MediaPlayer

HashMap<String, String> myHashRender = new HashMap(); 
String wakeUpText = "Are you up yet?"; 
String destFileName = "/sdcard/myAppCache/wakeUp.wav"; 
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, wakeUpText); 
mTts.synthesizeToFile(wakuUpText, myHashRender, destFileName); 

有关详细信息,请参见the article

相关问题