帖子

23127和23108错误码出现可能的原因及解决方法

[复制链接]
  • TA的每日心情
    开心
    2017-12-29 09:56
  • 签到天数: 46 天

    [LV.5]常住居民I

    39011  楼主| 王水 发表于 2015-9-30 12:40:04 1#
    23127 是ERROR_AITALK_GRM_NOT_UPDATE(语法未更新)
    23108 是ERROR_AITALK_NOT_FOUND(打开文件失败)
    出现这个错误一般的原因有一下两种:
    • 在开发者的工程中有多个语法,且多个语法中有相同名称的槽,当其中一个语法对该槽的内容进行了build之后,另外一个语法没有再次build就直接使用就会造成这个问题。最根本的解决方法是避免在同一个工程中使用多个语法文件,或者保证在使用某个语法之前,它确实已经build了且其他语法没有build。
    • 开发者在语法还没有buildGrammar的时候就开始mAsr.updateLexicon("槽名", 内容, 监听器)方法进行槽内容的修改。出现这个问题,首先好好研究一下命令词识别的Demo,看一下里面的调用次序,一定要保证你在操作某个槽的时候,该槽所在的语法已经build了。




    如果你还是想弄明白这个问题更深层次的原因,请往下看。
    深度原理解释:
    想要弄清楚这个问你首先要搞清楚离线语法构建的过程具体都做了什么。这里我做了一个测试,我使用demo连续build了两个语法文件(call和call1),这两个语法的内容完全一样,当然除了下面的两句:{:soso_e113:}
    QQ截图20150****10308.png QQ截图20150****10326.png


    在构建第一个语法(call)之后,发现在手机sd卡根目录的msc/test目录(该目录是通过mAsr.setParameter(ResourceUtil.GRM_BUILD_PATH, grmPath)设置的)下有个temp文件夹,里面的内容如下图所示:
    QQ截图20150****10613.png

    然后再次构建第二个语法(call1),发现上述目录下变成:
    QQ截图20150****11109.png

    大家对比看一下,会发现多出了call1.g和call1_16k文件,同时由于两个语法所有的槽都是一样的,所以所有的.d文件(保存各个槽信息的文件)都在构建call1时被覆盖了,而不是新建语法call1对应的文件。这就说明多个语法同名的槽是共享槽文件的。
    如果在mAsr.updateLexicon或者开始识别时,存在上述文件不存在或者不对应当前语法都有可能出现23127和23108错误。







    iflytek-小黑 发表于 2015-9-30 13:55:12
    2#
    {:soso_e163:}
    使用道具 举报 回复