Android TTS 文本内控件?它们是否可用或任何等效技术?

Android TTS in-text controls? Are they available or any equivalent technique?

我正在尝试将使用文本内控制标签的 TTS 应用从 desktop/web/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() 方法的以下两个变体使用 google 网络服务,以便准确计时从语音合成器服务器返回的语音文本,并且代码中的静音期计时可能是不可能的或充其量不可靠。

speak(speech, TextToSpeech.QUEUE_FLUSH, null);

speak(speech, TextToSpeech.ADD_ADD, null);

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

Android TTS engine 具有已弃用的 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 先停止一切并清除队列,因此立即播放静音。

最后,utteranceId 是要说出的文本(或在本例中为静音)的可选唯一标识符,如果使用 UtteranceProgressListener.

则很有用