无法跳过当前播放内容
qq63389745 发布于2016-06 浏览:1318 回复:1
0
收藏

1、使用batchSpeak播放多段文字

2、mSpeechSynthesizer.stop();

3、mSpeechSynthesizer.batchSpeak

假设在步骤1中播放到第二段了,那么在步骤3中不会从第一段开始播放。猜测应该是有缓存。那么怎么写代码,难道每次播放前都要release吗?



问题二:

如何实现类似于歌词选中的效果。比如播放到某句话,自动高亮



问题三:

队列播放完成有事件吗?什么事件。如果没有,如何知道队列播放完成



问题四:

怎么获取合成后的录音总时长。比如batchSpeak后,有什么事件接收吗?



by:leapsea

收藏
点赞
0
个赞
共1条回复 最后由用户已被禁言回复于2022-04
#2李维高liweigao回复于2016-06

1.调用stop后,会停止所有合成和播放线程,并清空缓存。stop后再调用batchspeak,就会从这次开始合成并播放,之前的会全部清掉。

2.合成的所有方法都有一个utteranceId参数,该参数会在该次文本合成的所有回调事件中返回给开发者。这样开发者就知道了是哪句文本正在合成,而且也有进度返回,所以可以满足高亮文本的需求。(utteranceId参数完全有开发者自己定义,内部原样返回)

3.每一句播放完成都有一个onSpeechFinish的回调。根据utteranceId可以知道哪句是最后一句,当然返回此id的时候,开发者也能判断出来是最后一句的事件。甚至可以自己设计队列结构来实现。

4.void onSynthesizeDataArrived(String utteranceId, byte[] audioData, int progress);该方法返回的是合成的音频数据,默认是16k, 2字节精度,单声道的PCM数据。可以计算出来时长。因为合成是边合成边播放,所以没办法一次得到所有的音频数据,所以也就没有办法一次计算出总时长。

0
TOP
切换版块