1、使用batchSpeak播放多段文字
2、mSpeechSynthesizer.stop();
3、mSpeechSynthesizer.batchSpeak
假设在步骤1中播放到第二段了,那么在步骤3中不会从第一段开始播放。猜测应该是有缓存。那么怎么写代码,难道每次播放前都要release吗?
问题二:
如何实现类似于歌词选中的效果。比如播放到某句话,自动高亮
问题三:
队列播放完成有事件吗?什么事件。如果没有,如何知道队列播放完成
问题四:
怎么获取合成后的录音总时长。比如batchSpeak后,有什么事件接收吗?
by:leapsea
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
1.调用stop后,会停止所有合成和播放线程,并清空缓存。stop后再调用batchspeak,就会从这次开始合成并播放,之前的会全部清掉。
2.合成的所有方法都有一个utteranceId参数,该参数会在该次文本合成的所有回调事件中返回给开发者。这样开发者就知道了是哪句文本正在合成,而且也有进度返回,所以可以满足高亮文本的需求。(utteranceId参数完全有开发者自己定义,内部原样返回)
3.每一句播放完成都有一个onSpeechFinish的回调。根据utteranceId可以知道哪句是最后一句,当然返回此id的时候,开发者也能判断出来是最后一句的事件。甚至可以自己设计队列结构来实现。
4.void onSynthesizeDataArrived(String utteranceId, byte[] audioData, int progress);该方法返回的是合成的音频数据,默认是16k, 2字节精度,单声道的PCM数据。可以计算出来时长。因为合成是边合成边播放,所以没办法一次得到所有的音频数据,所以也就没有办法一次计算出总时长。