您现在的位置: 开发 > Android 导航SDK > 开发指南 > 语音播报 > 语音合成

语音合成 最后更新时间: 2021年01月22日

内置语音控制

导航SDK从v5.6.0开始在AMapNavi提供了内置语音功能,开启内置语音以后,导航SDK会使用SDK内部语音合成方案进行播报,外部无需关心语音播报相关内容。

内置语音开关接口:  

   /**
    * 设置使用内部语音播报
    *
    * @param isUseInnerVoice 是否使用内部语音播报, 默认为false
    * @param isCallBackText  isUseInnerVoice设置为true以后,{@link AMapNaviListener#onGetNavigationText}接口是否继续返回文字,默认为false
    */
    @Override
    public void setUseInnerVoice(boolean isUseInnerVoice, boolean isCallBackText)

如果您使用内置语音,可以使用如下接口来控制内置语音的播报行为:

   /**  
    * 开始内置语音播报,只有在使用内置语音的情况下才有效
    * @since 6.4.0
    */
    @Override
    public void startSpeak()
    
   /**
    * 停止内置语音播报,只有在使用内置语音的情况下有效
    * 注意:7.1.0版本以后,调用该接口,会停止播放导航语音,但是仍然可以播放自定义语音
    * @since 6.4.0
    */
    @Override
    public void stopSpeak()

SDK 会通过AMapNaviListener类回调将播报的文字内容透传出来,如果您不想使用SDK的内置语音进行播报,也可以选择第三方的语音合成SDK(如:阿里云语音合成)将内容转化成声音信息,完成导航播报。以下是涉及到相关接口和回调:

   /**
    * 导航播报信息回调函数。
    * @param text 播报文字。
    * @since 5.3.0
    */
    void onGetNavigationText(String text)

如果您使用自己合成的方式来进行播报,需要在每句播报前和播报完成后设置一下AMapNavi中如下接口,保证不出现语音打断和延迟问题。

   /**
    * 获取当前SDK播报状态
    * 注意:正在播报的时候请不要播报语音,会导致与导航的播报冲突。
    * @since 6.4.0
    * @return 如果正在播报语音,返回值为true,如果没有在播报语音,返回值为false
    */
    public static boolean isTtsPlaying()

自定义语音播报

如果您使用了导航sdk的内置语音,我们还提供了自定义语音的播报功能,可以根据您的需要,传入自定义的播报文案进行语音合成与播报。 

    /**
     * 播放自定义文字,注意如果当前正在播放导航语音,可能导致播放失败,只在内置语音下生效
     *
     * @param tts       要播放的文字
     * @param forcePlay 是否强制进行播报
     *                  true  如果当前有其他导航语音,会等导航语音播放完毕后播放该文字,但是可能导致导航丢失掉关键引导信息
     *                  false 如果当前有其他导航语音,则不播报
     * @return 播放是否成功 true 成功,false 失败
     * @since 6.7.0
     */
    @Override
    public boolean playTTS(String tts, boolean forcePlay)
新用户
福利
示例
中心
常见
问题