示例中心
功能在线体验
menu 导航 closed 关闭
您现在的位置: 开发 > iOS 导航SDK > 开发指南 > 语音播报 > 语音合成 >

高德 开发 iOS 导航SDK 开发指南 语音播报 语音合成

更新时间:2020年10月15日

导航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的代码。  

新用户
福利
示例
中心
常见
问题