2010-06-12 42 views
2

我在模拟器上尝试了以下内容,但随着应用程序启动,它给出了运行时错误。有人能帮助我吗?继承人的代码我试图一个基本的文本到语音应用程序不工作

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

什么是运行时错误? – Chris 2010-06-12 14:31:33

+0

错误是: 应用程序TextSpeaker意外停止 – pranay 2010-06-12 15:53:41

+0

堆栈跟踪是http://pastebin.com/0asLcb5p – pranay 2010-06-12 20:35:10

回答

0

我已经远远超过它被张贴后一年就这个问题迷迷糊糊的,但我会继续前进,反正答案,纯粹希望它会帮助任何人否则谁会在未来结束。

我反对2.1写这个,所以道歉,如果你用< 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这可能是有用的。

祝你好运!