如何在Android Java上暂停文本到语音

时间:2018-04-02 22:56:59

标签: java android text-to-speech

目前,我已经实施了文本到语音(TTS)来阅读Books。由于TTS只允许最多4000个字符(并且书籍比这更简单)我将书分开并将每个部分添加到TTS队列。我想能够点击按钮并暂停TTS,然后从用户离开的地方恢复TTS。

我已经尝试过使用synthesizeToFile并暂停媒体文件对象,但是你再次只能合成一个小于4000个字符的文件。我不希望仅为TTS在用户设备上存储数百个媒体文件。

我可以让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;
    }
}

这就是我&#34;停止&#34; TTS:

tts.speak("Pausing!", TextToSpeech.QUEUE_FLUSH, null);

1 个答案:

答案 0 :(得分:3)

由于TextToSpeech类没有暂停/恢复方法,我建议您执行以下操作:

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

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

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

4)当用户点击继续时,在被中断的句子的开头恢复语音。

无论如何,这将导致更好的用户理解(书中),而不是字面上暂停和恢复句子。