语音合成 最后更新时间: 2021年01月22日
导航SDK从v5.5.0开始在AMapNaviBaseManager提供了如下接口,表示是否使用内置语音进行导航播报,骑步行导航、驾车导航都支持。如果您设置为YES,导航SDK会使用苹果系统自带的语音合成方案进行播报,其他的您什么都不用做。
///是否使用内置语音进行导航播报, 如果为YES,就是由导航SDK来播报导航信息. 默认为NO. since 5.5.0
@property (nonatomic, assign) BOOL isUseInternalTTS;
此外,SDK还会通过回调将播报的文字内容透传出来,如果您不想使用SDK的内置语音进行播报,也可以选择第三方的语音合成SDK(如:阿里云语音 )将内容转化成声音信息,完成导航播报。以下是涉及到相关接口和回调:
导航类型 |
类名 |
接口与回调 |
说明 |
---|---|---|---|
驾车导航 | <AMapNaviDriveManagerDelegate> | driveManager:playNaviSoundString:soundStringType: | 导航播报信息回调函数,此回调函数需要和driveManagerIsNaviSoundPlaying:配合使用。 |
driveManagerisNaviSoundPlaying: | 请根据实际情况返回是否正在播报语音,如果正在播报语音,请返回YES, 如果没有在播报语音,请返回NO | ||
步行导航 |
AMapNaviWalkManager | -setTTSPlaying: | 请根据实际情况设置外界此时是否正在进行语音播报。如果外界正在播报语音,传入YES,否则传入NO。 |
<AMapNaviWalkManagerDelegate> | walkManager:playNaviSoundString:soundStringType: | 导航播报信息回调函数,此回调函数需要和-setTTSPlaying:配合使用。 | |
骑行导航 | AMapNaviRideManager | -setTTSPlaying: | 请根据实际情况设置外界此时是否正在进行语音播报。如果外界正在播报语音,传入YES,否则传入NO。 |
<AMapNaviRideManagerDelegate> | rideManager:playNaviSoundString:soundStringType: | 导航播报信息回调函数,此回调函数需要和-setTTSPlaying:配合使用。 |
使用说明
以下,以驾车导航使用系统的语音合成方案为例。
- (BOOL)driveManagerIsNaviSoundPlaying:(AMapNaviDriveManager *)driveManager
{
return [[SpeechSynthesizer sharedSpeechSynthesizer] isSpeaking];
}
- (void)driveManager:(AMapNaviDriveManager *)driveManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType
{
NSLog(@"playNaviSoundString:{%ld:%@}", (long)soundStringType, soundString);
[[SpeechSynthesizer sharedSpeechSynthesizer] speakString:soundString];
}
func driveManager(_ driveManager: AMapNaviDriveManager, onArrivedWayPoint wayPointIndex: Int32) {
NSLog("ArrivedWayPoint:\(wayPointIndex)");
}
func driveManagerIsNaviSoundPlaying(_ driveManager: AMapNaviDriveManager) -> Bool {
return SpeechSynthesizer.Shared.isSpeaking()
}
需要注意的是,一定要给-driveManagerisNaviSoundPlaying: 返回正确的布尔值。如果一直返回YES,SDK内部会认为外界一直在播报,"-driveManager:playNaviSoundString:soundStringType" 就会一直不触发,导致无文字吐出;如一直返回NO,文字吐出的频率可能会过快,会出现语句打断的情况,所以请根据实际情况返回。详细的使用方法请参考:官方 Demo中的SpeechSynthesizer.m的代码。