我正在尝试使用Android文字转语音来说出大量文字。我使用默认的Google语音引擎。下面是我的代码。
public class Talk extends Activity implements TextToSpeech.OnInitListener {
private ImageView playBtn;
private EditText textField;
private TextToSpeech tts;
private boolean isSpeaking = false;
private String finalText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_talk);
//Intialize the instance variables
playBtn = (ImageView)findViewById(R.id.playBtn);
textField = (EditText)findViewById(R.id.textField);
//Resister the listeners
playBtn.setOnClickListener(new PlayBtnAction());
//Other things
tts = new TextToSpeech(this,this);
//Get the web page text if called from Share-Via
if (Intent.ACTION_SEND.equals(getIntent().getAction()))
{
new GetWebText().execute("");
}
}
//This class will execute the text from web pages
private class GetWebText extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String text = getIntent().getStringExtra(Intent.EXTRA_TEXT);
String websiteText = "";
try {
//Create a URL for the desired page
URL url = new URL(text);
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
StringBuffer strBuffer = new StringBuffer("");
while ((str = in.readLine()) != null)
{
strBuffer.append(str+"\n"+"\n");
}
in.close();
String html = strBuffer.toString();
Document doc = Jsoup.parse(html);
websiteText = doc.body().text(); // "An example link"
//Toast.makeText(this, websiteText, Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Log.e("web_error", "Error in getting web text",e);
}
return websiteText;
}
@Override
protected void onPostExecute(String result)
{
textField.setText(result);
}
}
}
//Class to speak the text
private class PlayBtnAction implements OnClickListener
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
if(!isSpeaking)
{
isSpeaking = true;
//speak(textField.getText().toString());
finalText = textField.getText().toString();
new SpeakTheText().execute(finalText);
isSpeaking = false;
}
else
{
isSpeaking = false;
tts.stop();
}
}
}
@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if(status==TextToSpeech.SUCCESS)
{
int result = tts.setLanguage(Locale.UK);
if(result==TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
{
Toast.makeText(this, "Language Not Supported", Toast.LENGTH_LONG).show();
}
}
}
//This class will speak the text
private class SpeakTheText extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
tts.speak(params[0], TextToSpeech.QUEUE_FLUSH, null);
return null;
}
}
@Override
public void onDestroy()
{
if(tts!=null)
{
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
}
但是这里的问题是,当有大量文本(假设您已从网页中提取文本)时,TTS无法读取它。如果我删除了大部分文本,它将读取它。为什么会这样呢?
当我要阅读大文本时,LogCat会显示如下内容
10-11 07:26:05.566: D/dalvikvm(2638): GC_CONCURRENT freed 362K, 44% free 3597K/6312K, paused 17ms+8ms, total 93ms
字符串长度不得超过docs中预定义的长度:
参量
text
要说的文字字符串。不得超过getMaxSpeechInputLength()个字符。
getMaxSpeechInputLength()
每个设备的返回值可能会有所不同,但根据AOSP来源(
高达 4000) :
/**
* Limit of length of input string passed to speak and synthesizeToFile.
*
* @see #speak
* @see #synthesizeToFile
*/
public static int getMaxSpeechInputLength() {
return 4000;
}
尽量不要超过该限制:将输入文本的长度与该值进行比较,并在必要时分成多个部分。
问题内容: 我正在尝试通过myDeploy.sh导出变量,但未设置导出。当我回声时,它不是在回声。但是,当我在命令上显式设置变量时,它也会正确设置并回显。以下是我的代码段。 myDeploy.sh 当我回声时,并不是在为我回声。但是当我在命令提示符下明确执行它时 它设置正确并且也回显。我想念什么? 问题答案: 像这样运行脚本 要么 会在当前shell上下文中执行脚本(不创建子shell),并且脚本
[2016-01-08 15:06:49,354][WARN][http.netty][Marvel Man]在处理客户端http tra ffic时捕获异常,关闭连接[ID:0x2D26BAEC,/0:0:0:0:0:0:0:0:0:1:58923=>/0:0:0:0:1:9200]org.jboss.netty.handler.codec.frame.ToolongFrameException
我正在使用大容量插入将文本文件读入SQL Server表。当我尝试使用bulk insert时,我总是会遇到同样的错误,尽管如果我取文本文件的第一行,并将值复制到一个普通的旧insert into语句中,一切都正常。我的数据库stop_times的设置如下: 但是,将第一行复制并粘贴到 管用。我觉得我在大容量插入函数中遗漏了一些非常明显的东西,但我一无所知。
我正在开发一个Android应用程序,我想将输入过滤器设置为只允许EditText中包含21个字符。 我使用的XML代码片段如下 在活动中, 它不允许输入超过21个字符,但我无法告知用户长度不能超过21个字符,因为没有显示过滤器中的消息。 我尝试过使用,但它在第21个字符后没有被调用,因为我使用将限制设置为21。 任何人,请帮我找到解决办法。
当我运行下面的函数时,它下载源文件大约3分钟,然后关闭会话,即使一个1-1.6GB的文件只下载了38-41MB(变化)。 从Paramiko日志文件中可以看出,SSh连接在SFTP会话关闭时保持打开状态: DEB[20120913-10:05:00.894]Thr=1帕拉米科。运输:切换到新键...DEB[20120913-10:05:06.953]Thr=1 Paramiko。传输:重新密钥(命