常见问题
Android播放多段长文本
建议使用sdk内部的队列缓存。 int speak(String text, String utteranceId);
如一开始一次性调用10次speak方法,收到合成结束的onSynthesizeFinish回调后(可以收到utteranceId参数),再加入1句新的。保持sdk内部队列中一直有10个句子。
SDK内部会按照队列次序不断合成。自动按照次序播放
Android控制播放暂停及自定义播放
SDK是无论何种场景都会一直播放。比如有电话接入,需要暂停播放。用户需要自行实现,收到系统电话接入的事件调用pause方法, 结束后调用resume方法。
如果觉得SDK的播放方式您不满意,可以调用synthesize() 方法仅合成不播放。通过onSynthesizeDataArrived 获取音频数据,自行处理播放。
Android高亮当前在读的文字
onSpeechProgressChanged()根据播放音频的时长百分比回调进度,由于每个字的发音不是等长的,和实际读的文字会有误差。当一次合成的文件较长时,误差尤为明显。
Android播放过程中切换发音人
在线发音人, 要求在引擎空闲时切换。 SDK内部有合成队列和播放队列。其中合成队列独立,调用的句子在合成队列结束后加入播放队列。
引擎空闲是指合成队列为空,即合成全部完成。 即onSynthesizeFinish中,收到的utteranceId为最后一个。utteranceId参数是speak或synthesize方法的第二个参数。
也可以随时调用stop方式,比如最近的一句话说完时,清空播放队列和合成队列,达到引擎空闲的状态。
具体请参见demo的SwitchSpeakerListener类。
ios如何同时集成语音识别和语音合成?两个.a名字是一样的,内容一样么?
内容不一样,同时集成只需将.a换个名字重新导入即可。同名的资源文件内容是一样的。
ios如何获得合成的音频数据
请参考Demo中的synthesizerNewDataArrived
方法。注意合成的数据是逐段返回的,如果需要完整的音频,开发者自行拼接数据即可。
ios如何管理AudioSession
请开发者参考SDK头文件 BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT
和BDS_SYNTHESIZER_PARAM_AUDIO_SESSION_CATEGORY_OPTIONS
配置说明或者文档关于AVAudioSession部分。如果无法达成预期效果,建议收取合成的音频数据,自行播放。
ios如何实现后台播放、如何实现锁屏界面的播放、显示
SDK内部不会对后台、锁屏相关功能做任何控制,但会在必要的时候调用setActive接口对外部音频进行打断及恢复,会影响某些场景下的锁屏显示,如果开发者不希望SDK对AudioSession进行操作自己管理,可以通过参数配置接口,把BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT对应的value设置为NO,即可屏蔽SDK内部的操作。建议开发者自行收取合成音频数据,播放音频的同时来实现相关功能。
商务合作的流程是怎样的?
请在AI官网底部点击“商务合作”,详细描述您的需求。或者在百度云提交工单申请合作。
如何反馈使用问题
在反馈问题之前,请开发者务必在Demo测试并复现。
通过各个渠道反馈问题时,请务必详细描述以下信息:
问题描述:(具体问题,稳定复现/概率)
SDK 版本:(是否已经切换到最新版本)
是否已在Demo中复现:请务必在Demo中复现遇到的错误。无法在Demo复现的问题相对难以定位原因。
若能在Demo中复现,请描述:
SDK:(SDK类型,版本号)
初始化引擎代码:(在线引擎、离线引擎代码片段)
APPID:
复现逻辑:(如何复现)
完整日志:(附上开启Debug模式的,从启动到结束的完整日志)