1

我正在尝试将利用文本控制标签的 TTS 应用程序从桌面/网络/iOS 移植到 Android。该应用程序制作一个文本文件,其中包含要说出的文本和说出的单词之间的静默时间段。静默期用文本控制标记表示,例如 SAPI TTS<silence msec="1000"/>标记或 iOS TTS 引擎文本控制标记用于静默[[slnc 10000]]

发送到 SAPI TTS 语音合成器的文本如下所示:

Text one <silence msec="750"/> text two <silence msec="1000"/> text three <silence msec="500"/> Text four <silence msec="600"/> Text five.....

同样,对于 iOS TTS,用于静音的文本控制标记是[[slnc 10000]],要发送到语音合成器的文本如下所示:

Text one [[slnc 750]] text two [[slnc 10000]] text three [[slnc 500]] text four [[slnc 600]] text five......

Android TTS 似乎没有为语音合成器使用文本控制标签。此外,该方法的以下两种变体speech()使用谷歌网络服务,以便实现从语音合成器服务器返回的语音文本的准确计时,并且代码中的静音时段的计时可能是不可能的或充其量是不可靠的。

speak(speech, TextToSpeech.QUEUE_FLUSH, null);

speak(speech, TextToSpeech.ADD_ADD, null);

我欢迎任何专注于保持口语之间沉默时间的准确时间的 Android 解决方案。

4

1 回答 1

3

Android TTS 引擎具有已弃用playSilence()和更新的方法playSilentUtterance(),可用于在给定的时间内暂停语音输出。

如果应用程序的目标是 API 级别 21,即 Android 5.0 作为最低要求,那么playSilentUtterance()应该使用。否则,弃用playSilence()的仍然可用。

该方法的完整方法签名playSilentUtterance是:

int playSilentUtterance (long durationInMs, int queueMode, String utteranceId)

durationInMs是静音的持续时间(以毫秒为单位)。

queueMode可以是,这QUEUE_ADD意味着在 TTS 引擎完成当前正在说话的内容以及已经添加到队列中的内容之后播放静音,并QUEUE_FLUSH首先停止一切并清除队列,因此立即播放静音。

最后,这是要说出的文本(或在本例中为静音)的可选唯一标识符,并且在使用UtteranceProgressListenerutteranceId时很有用。

于 2017-04-12T07:30:32.087 回答