我在模拟器上尝试了以下内容,但是当应用程序启动时,它会产生运行时错误。有人可以帮我这个。继承人'我试过的代码
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);
}
}
}
}
答案 0 :(得分:0)
在发布这个问题一年多之后我就偶然发现了这个问题,但无论如何我都会继续回答,纯粹希望它能帮助将来会在这里结束的其他人。< / p>
我这是针对2.1撰写的,如果您使用&lt; 2.1(没有问题标签),请致歉
我可以立即发现一些可能让你有点悲伤的事情。
首先,以下内容:
mtts.speak(test1, TextToSpeech.QUEUE_FLUSH, null);
mtts.speak(test2, TextToSpeech.QUEUE_FLUSH, null);
如果我正确理解TextToSpeech API,使用QUEUE_FLUSH将清除当前正在说话的任何内容,因此可能第二行在第一行实际发言之前执行,并且您将体验到你所拥有的如上所述,只说最后一个。
理想情况下,你只需要其中一条线,如果用户输入不同的字符串,那么只需将其传递并让它冲出。
接下来,你应该投资一个onDestroy覆盖,在这里你可以关闭mtts对象,这可以防止你的应用程序占用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引擎可能会提供更多。
如果所有其他方法都失败了,我写了一篇可能有用的tutorial here。
祝你好运!