【发布时间】:2017-04-11 15:04:04
【问题描述】:
我正在尝试将使用文本控制标签的 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() 方法的以下两种变体使用 google 网络服务,以便实现从语音合成器服务器返回的语音文本的准确计时,并且代码中的静音时段的计时可能是不可能的或充其量是不可靠的。
speak(speech, TextToSpeech.QUEUE_FLUSH, null);
speak(speech, TextToSpeech.ADD_ADD, null);
我欢迎任何专注于保持口语之间无声时段的准确计时的 Android 解决方案。
【问题讨论】:
-
你读过Android TTS documentation吗?有
playSilence()和更新的playSilentUtterance()方法可以做到这一点。而speak()不使用任何网络服务。 -
感谢@MarkusKauppinen,因此答案将是交替 speak() 和 playSilence() 与 QUEUE_ADD 以不断添加到队列中。我打算为用户提供一个 stop(),所以不需要 isSpeaking()。我喜欢。至于在线离线语音合成,似乎默认方法是向谷歌服务器发送请求。或者,用户可以通过手机上的设置下载引擎以供离线使用。可以提前通知用户进行这些更改,包括设置默认语音和语言。太棒了:)
标签: android text-to-speech vb4android