帖子

【官方】高德导航SDK、集成MSC语音服务冲突问题

 关闭 [复制链接]
  • TA的每日心情
    开心
    2017-1-20 10:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    29426  楼主| fenghua__1314 发表于 2015-7-20 14:18:35 1#
    本帖最后由 fenghua__1314 于 2015-7-21 08:48 编辑

    近来有开发者反馈在集成高德导航sdk时,集成我们的msc语音服务会有冲突。这个是由于高德导航sdk中包含了合成服务。在对高德导航的sdk及demo分析后发现。高德导航sdk中的导航服务与msc的合成服务是相互独立的,可以用语音最新sdk进行替换。以下高德导航Demo AMap_Android_Navi_Demo_V1.2.0为例:
    只需要将TTSController中init()进行如下操作:
    1. public void init() {
    2.         // SpeechUser.getUser().login(mContext, null, null,
    3.         // "appid=" + mContext.getString(R.string.app_id), listener);
    4.         // 初始化合成对象.
    5.         // mSpeechSynthesizer =
    6.         // SpeechSynthesizer.createSynthesizer(mContext);</font>

    7.         // 1、将SpeechUser初始化方法替换成以下初始化
    8.         SpeechUtility.createUtility(mContext,
    9.                         "appid=" + mContext.getString(R.string.app_id));
    10.         // 2、初始化合成对象.
    11.         mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext,
    12.                         new InitListener() {
    13.                                 @Override
    14.                                 public void onInit(int errorcode) {
    15.                                         if (ErrorCode.SUCCESS == errorcode) {
    16.                                                 // 3、初始化成功开发者根据需求设置合成参数
    17.                                                 // 可以设置调用本地合成,详细设置参考语音云demo
    18.                                                 initSpeechSynthesizer();
    19.                                         } else {
    20.                                                 Log.d(TAG, "tts init failed!");
    21.                                         }
    22.                                 }
    23.                         });
    24. }
    复制代码
    之后在playText()方法做一下细节修改。将其中的创建合成对象初始化回调中,进行参数设置和合成启动。
    1. /**
    2. * 使用SpeechSynthesizer合成语音,不弹出合成Dialog.
    3. *
    4. * @param
    5. */
    6. public void playText(final String playText) {
    7.         if (!isfinish) {
    8.                 return;
    9.         }
    10.         if (null == mSpeechSynthesizer) {
    11.                 // 创建合成对象.
    12.                 mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext, new InitListener() {
    13.                         @Override
    14.                         public void onInit(int errorcode) {
    15.                                 if (ErrorCode.SUCCESS == errorcode) {
    16.                                         initSpeechSynthesizer();
    17.                                         // 进行语音合成.
    18.                                         mSpeechSynthesizer.startSpeaking(playText, TTSController.this);
    19.                                 } else {
    20.                                         Log.d(TAG, "tts init failed!");
    21.                                 }
    22.                         }
    23.                 });
    24.         } else {
    25.                 // 进行语音合成.
    26.                 mSpeechSynthesizer.startSpeaking(playText, this);
    27.         }
    28. }
    复制代码


    完成以上初始化,你就能正常的使用我们最新版本msc中的语音合成服务;
    若想调用本地合成,请参考mscV5plusdemo中的参数设置,将initSpeechSynthesizer中的参数设置修改即可

    ps:
    1、以上替换修改调试示例代码,开发者可以根据以上代码修改,但建议将SpeechUtility初始化配置放置在Application中实现
    2、完成替换修改后,开发者可以使用最新的语音接口参考sdk下载文使用msc的其他服务。如评测、本地识别、唤醒等服务;





    小西哥 发表于 2015-7-20 14:31:33
    2#
    赞!
    使用道具 举报 回复
    jianhuang3@ifly 发表于 2015-7-20 14:47:40
    3#
    {:soso_e129:}{:soso_e129:}{:soso_e129:}
    使用道具 举报 回复
    iflytek-小黑 发表于 2015-7-20 15:18:49
    4#
    好实用~~~10086个赞
    使用道具 举报 回复
    xugao2@iflytek. 发表于 2015-7-20 15:43:22
    5#
    {:soso_e192:}
    使用道具 举报 回复
    infisight@infis 发表于 2015-7-20 18:07:02
    6#
    // 1、将SpeechUser初始化方法替换成以下初始化
    具体要替换的初始化方法在哪呢
    使用道具 举报 回复
     楼主| fenghua__1314 发表于 2015-7-21 08:49:25
    7#
    infisight@infis 发表于 2015-7-20 18:07
    // 1、将SpeechUser初始化方法替换成以下初始化
    具体要替换的初始化方法在哪呢 ...

    这个是论坛帖子显示问题,已修改了
    使用道具 举报 回复