当前,我已经实施了文本到语音(TTS(来阅读书籍。由于TTS最多只能允许4000个字符(而且一本书比这更可行(,所以我将书分开,并将每个部分添加到TTS队列中。我想单击一个按钮并暂停TTS,然后恢复用户关闭的TTS。
我尝试使用synthesizetofile并暂停媒体文件对象,但是再次,您只能在一个少于4000个字符的情况下合成一个文件。我不想仅将数百个媒体文件存储在用户设备上。
我可以让TTS阅读这本书,我无法停止它,然后从本书的开头开始启动TTS。
在下面的代码中,我将整本书存储在字符串bookText
中。TTS引擎是tts
变量。
这就是我加载TTS队列的方式:
int position = 0;
int pos = 0;
int sizeOfChar = bookText.length();
String testString = bookText.substring(position,sizeOfChar);
int next = 500;
while(true) {
String temp = "";
try {
temp = testString.substring(pos, next);
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, temp);
tts.speak(temp, TextToSpeech.QUEUE_ADD, params);
pos = pos + 500;
next = next + 500;
}
catch (Exception e) {
temp = testString.substring(pos, testString.length());
tts.speak(temp, TextToSpeech.QUEUE_ADD, null);
break;
}
}
这就是我"停止" TTS的方式:
tts.speak("Pausing!", TextToSpeech.QUEUE_FLUSH, null);
由于文本托语类没有暂停/简历方法,我建议这样做以下操作:
1(将书分为句子,而不是500个字符块。(您可以使用"。"作为定界符解析(。
2(引入一个"主索引"计数器,x,跟踪进度为:我们在句子#x/total句子中。
3(当用户单击暂停时,只需使用stop((方法。
4(当用户单击简历时,在被打断的句子开头的恢复语音。
无论如何,这将导致(对书(的用户理解更好。