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

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

更新时间:2018年07月05日

导航 SDK 通过回调将播报的文字内容透传出来,您可以使用第三方的语音合成SDK(如:科大讯飞)将此内容转化成声音信息,完成导航播报。也可以选择使用SDK提供的苹果离线语音播报系统。

涉及播报相关回调

导航 SDK 中透传文字的回调见下表。

导航类型

类名

导航文字回调

说明

驾车导航

AMapNaviDriveManagerDelegate

driveManager:playNaviSoundString:soundStringType:

导航播报信息回调函数,此回调函数需要和driveManagerIsNaviSoundPlaying:配合使用。

driveManagerisNaviSoundPlaying:

请根据实际情况返回是否正在播报语音,如果正在播报语音,请返回YES, 如果没有在播报语音,请返回NO

步行导航

AMapNaviWalkManagerDelegate

walkManager:playNaviSoundString:soundStringType:


骑行导航

AMapNaviRideManagerDelegate

rideManager:playNaviSoundString:soundStringType:


语音合成

获取到播报的文字内容,再使用第三方的语音合成库的播报方法将其播出来就实现语音播报。

对于 iOS 系统来说: 

  • 可使用 iOS 系统的语音合成功能(具体可参考:AVFoundation.framework)。推荐此方法,使用方法可参考官方 Demo中的 SpeechSynthesizer.m 的代码。

对于驾车导航的播报,需要通过driveManagerisNaviSoundPlaying:回调的返回值来进行播报处理,如果设备正在播报语音(一般情况下,语音播报类会有正在播报语音的属性),请返回YES;如果设备没有在播报语音,请返回NO。下面以系统的语音SDK为例,介绍如何正确进行播报。

- (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()
}



示例中心 功能
在线体验
常见问题