【问题标题】:How to Pause Text to Speech on Android Java如何在 Android Java 上暂停文本转语音
【发布时间】:2018-09-12 04:18:13
【问题描述】:

目前,我已经实现了文本到语音 (TTS) 来阅读书籍。由于 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;
    }
}

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

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

【问题讨论】:

标签: java android text-to-speech


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 由于speak()方法是异步的,我们如何获取当前索引?
  • 您可以使用话语进度侦听器并在 onDone() 回调方法中增加索引。
  • 谢谢.. 我没有直接在onDone() 中增加索引,而是创建了一个函数来播放语音并增加索引,然后在onDone() 中调用该函数。那行得通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多