App中同时使用了ASR iOS SDK
和离线在线语音合成 iOS SDK
,主要使用的功能:语音唤醒、语义识别、语音合成。在未集成离线在线语音合成 iOS SDK
时可以正常使用唤醒和语音识别功能,一旦集成了离线在线语音合成 iOS SDK
,这两个功能无法使用。
分析步骤:
- 1.通过在公司的app中调试AVAudioSession的
-setActive:error:
方法,发觉每次tts播报完成后,就会在百度tts内部的线程中将active设置为NO,导致ASR iOS SDK
无法进行语音录制,所以无法唤醒和语义识别。 - 2.到现在问题已经很明确了,是AVAudioSession的激活状态被解除了,通过设置
离线在线语音合成 iOS SDK
的参数问题解决。
下面是引用自语音合成中的AudioSession
合成SDK默认会将AudioSession的Category
设置为AVAudioSessionCategoryPlayback
,并在必要的时候调用setActive:
接口对外部音频进行打断及恢复,如果开发者不希望SDK对AudioSession
进行操作,可以通过参数配置接口,把BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT
对应的value设置为NO,即可屏蔽SDK内部的操作,按照需求,自行配置AudioSession。
//--------------- 以下参照百度地图tts参数
// 语速
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(6) forKey:BDS_SYNTHESIZER_PARAM_SPEED];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(0) forKey:BDS_SYNTHESIZER_PARAM_USER_AGENT];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(0) forKey:BDS_SYNTHESIZER_PARAM_ONLINE_TTS_THRESHOLD];
// 禁用百度sdk的AudioSession
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(NO) forKey:BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(9) forKey:BDS_SYNTHESIZER_PARAM_VOLUME];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(ETTS_AUDIO_TYPE_PCM_8K) forKey:BDS_SYNTHESIZER_PARAM_ETTS_AUDIO_FORMAT];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(1) forKey:BDS_SYNTHESIZER_PARAM_ETTS_DOMAIN_SYNTH];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(1) forKey:21];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(NO) forKey:BDS_SYNTHESIZER_PARAM_AUDIO_SESSION_CATEGORY_OPTIONS];
//---------------
网友评论