如何在Android Java上暂停文字转语音

Jus*_*ham 4 java android text-to-speech

目前,我已经实现了文字转语音(TTS)来阅读书籍。由于TTS最多只能容纳4000个字符(而且一本书的数量更多),所以我将本书拆分开,并将每个部分添加到TTS队列中。我希望能够单击一个按钮并暂停TTS,然后再从用户停止的地方继续执行TTS。

我尝试使用synthesizeToFile并暂停媒体文件对象,但是同样,您一次只能合成一个文件,少于4000个字符。我不想仅在TTS上将数百个媒体文件存储在用户设备上。

我可以让TTS读这本书,只是停下来不停然后从书的开头开始TTS。

在下面的代码中,我将整本书存储在string中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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我“停止” TTS的方式:

tts.speak("Pausing!", TextToSpeech.QUEUE_FLUSH, null);
Run Code Online (Sandbox Code Playgroud)

Boo*_*unz 5

由于TextToSpeech类没有暂停/继续方法,因此建议执行以下操作:

1)将本书分成句子,而不是500个字符块。(您可以使用“。”作为分隔符进行解析)。

2)引入一个“主索引”计数器X,该计数器跟踪进度为:我们在句子X /总句子中。

3)当用户单击暂停时,只需使用stop()方法。

4)当用户单击“继续”时,在被中断的句子的开头继续讲话。

无论如何,这将比从字面上暂停和恢复中间句子带来更好的用户理解力。