2017-04-11 64 views
1

我正尝试移植一个TTS应用程序,该应用程序利用从桌面/ web/iOS到Android的文本内控制标记。该应用程序创建一个文本文件,包括要说出的文本和说出的单词之间的无声时段。静音周期与文本控制标记,如SAPI TTS <silence msec="1000"/>标签或iOS TTS引擎,文字静音控制标签代表[[slnc 10000]]Android TTS文本控件?它们是可用的还是任何等效的技术?

发送到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解决方案,专注于维护话语之间的静默期的精确计时。

+0

您是否阅读过[Android TTS文档](https://developer.android.com/reference/android/speech/tts/TextToSpeech.html)?有'playSilence()'和更新的'playSilentUtterance()'方法可以做到这一点。 'speak()'不使用任何Web服务。 –

+0

感谢@MarkusKauppinen,所以答案将会是用QUEUE_ADD替代speak()和playSilence()以不断添加到队列中。我打算为用户提供一个stop(),所以不需要isSpeaking()。我喜欢。至于在线脱机语音合成,似乎默认的方法是发送请求到谷歌服务器。或者,用户可以通过手机上的设置下载引擎进行离线使用。用户可以提前通知进行这些更改,包括设置默认语音和语言。伟大:) –

回答

2

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时非常有用。

+0

我在这里是新的,我想我得到了我的问题的答案。不确定是否需要关闭它,将其标记为已回答,保持原样? –

+0

如果您对答案感到满意,您可以接受它。没有必要对这个问题做任何事情。它将与答案一起保留在档案中,具有相同问题的人可能稍后会通过搜索找到它。 –

+0

为了与SAPI文本中的静音标签行为兼容,需要创建一种新的方法,例如'playSAPIText()'将解析文本,并为文本和'playSilentUtterance()'或'playSilence()'(对于API前级21)应用'speak()'方法来设置沉默期。在这种情况下'queueMode'应该是'QUEUE_ADD'来提供不间断的音频流。 –

相关问题