常见问题
更新时间:2022-02-23
播放多段长文本
建议使用sdk内部的队列缓存。 int speak(String text, String utteranceId); 如一开始一次性调用10次speak方法,收到合成结束的onSynthesizeFinish回调后(可以收到utteranceId参数),再加入1句新的。保持sdk内部队列中一直有10个句子。 SDK内部会按照队列次序不断合成。自动按照次序播放
控制播放暂停及自定义播放
SDK是无论何种场景都会一直播放。比如有电话接入,需要暂停播放。用户需要自行实现,收到系统电话接入的事件调用pause方法, 结束后调用resume方法。
如果觉得SDK的播放方式您不满意,可以调用synthesize() 方法仅合成不播放。通过onSynthesizeDataArrived 获取音频数据,自行处理播放。
高亮当前在读的文字
onSpeechProgressChanged()根据播放音频的时长百分比回调进度,由于每个字的发音不是等长的,和实际读的文字会有误差。当一次合成的文件较长时,误差尤为明显。
播放过程中切换发音人
无论是在线还是离线发音人, 均要求在引擎空闲时切换。 SDK内部有合成队列和播放队列。其中合成队列独立,调用的句子在合成队列结束后加入播放队列。
引擎空闲是指合成队列为空,即合成全部完成。 即onSynthesizeFinish中,收到的utteranceId为最后一个。utteranceId参数是speak或synthesize方法的第二个参数。
也可以随时调用stop方式,比如最近的一句话说完时,清空播放队列和合成队列,达到引擎空闲的状态。
具体请参见demo的SwitchSpeakerListener类。
常见错误码及解决方案
错误码 | 含义 | 可能原因 | 自查指南 | 解决办法 |
---|---|---|---|---|
-102 | 离线授权下载license失败 | 1.网络不佳 2.授权码额度耗尽3.SN已经绑定其他设备导致下载license失败 | 1. 检查离线联网授权时的网络环境;2.确认SN序列号是否还有额度3.确认SN之前是否绑定过其他设备(刷机等更改设备信息的操作都是导致下载license失败) | 1. 更换稳定的网络环境;2. 补充SN序列号额度3. 如绑定过其他设备更换新的授权SN |
-108 | 离线合成引擎初始化失败 | loadmodel的资源文件 离线音库文件 没加载 | 1.确认音库文件是否下载;2.是否在指定位置加载;3. 判断模型文件是否有效 点击 | 1.如加载位置没有对应的文本和音库文件,手动复制文件到指定位置;2.可以尝试删除应用,重新安装测试 |
同上 | loadmodel时合成引擎不空闲 | sdk只支持同一语种的不同发音人使用loadModel方法切换,例如,度小美切换度丫丫。如果是中文切英文或者粤语,需要反初始化后再初始化 | 如需要切换不同的文本资源,请先调用release方法,再次执行新的文本资源初始化 | |
同上 | 其他 | 初始化添加LoggerProxy.printable(true);保存启动app到报错的完整日志 | 提供日志,百度侧进一步判断 | |
-119 | SN序列号不合法 | SN序列号不在有效期内 | 核对绑定的SN序列号 | 更换合法SN序列号 |
同上 | SN序列号已被绑定 | 需要确认SN序列号是否已经绑定其他设备,或者设备刷机等导致cuid变更操作 | 反馈给百度侧,进一步判断 | |
鉴权未通过 | 鉴权信息错误 |
需要确认SN序列号外的其他鉴权信息 |
填写正确的鉴权信息,注意空格 |
|
-204 | 离线合成初始化失败 | 设备的系统时间超出license时效 | 确认设备的系统时间是否正常 | 校验系统时间 |
同上 | license 超出有效期 | 确认SN序列号在有效期内 | 更换有效期内授权SN |