安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 ANHUI USTC iflytek CO.,LTD 科 大 讯 飞 MSC 新 手 指 南
重 要 声 明 版 权 声 明 版 权 所 有 2014, 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司, 保 留 所 有 权 利 商 标 声 明 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 的 产 品 是 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 专 有 在 提 及 其 他 公 司 及 其 产 品 时 将 使 用 各 自 公 司 所 拥 有 的 商 标, 这 种 使 用 的 目 的 仅 限 于 引 用 本 文 档 可 能 涉 及 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 的 专 利 ( 或 正 在 申 请 的 专 利 ) 商 标 版 权 或 其 他 知 识 产 权, 除 非 得 到 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 的 明 确 书 面 许 可 协 议, 本 文 档 不 授 予 使 用 这 些 专 利 ( 或 正 在 申 请 的 专 利 ) 商 标 版 权 或 其 他 知 识 产 权 的 任 何 许 可 协 议 不 作 保 证 声 明 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 不 对 此 文 档 中 的 任 何 内 容 作 任 何 明 示 或 暗 示 的 陈 述 或 保 证, 而 且 不 对 特 定 目 的 的 适 销 性 及 适 用 性 或 者 任 何 间 接 特 殊 或 连 带 的 损 失 承 担 任 何 责 任 本 手 册 内 容 若 有 变 动, 恕 不 另 行 通 知 本 手 册 例 子 中 所 用 的 公 司 人 名 和 数 据 若 非 特 别 声 明, 均 属 虚 构 未 得 到 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 明 确 的 书 面 许 可, 不 得 为 任 何 目 的 以 任 何 形 式 或 手 段 ( 电 子 的 或 机 械 的 ) 复 制 或 传 播 手 册 的 任 何 部 分 保 密 声 明 本 文 档 ( 包 括 任 何 附 件 ) 包 含 的 信 息 是 保 密 信 息 接 收 人 了 解 其 获 得 的 本 文 档 是 保 密 的, 除 用 于 规 定 的 目 的 外 不 得 用 于 任 何 目 的, 也 不 得 将 本 文 档 泄 露 给 任 何 第 三 方 本 软 件 产 品 受 最 终 用 户 许 可 协 议 (EULA) 中 所 述 条 款 和 条 件 的 约 束, 该 协 议 位 于 产 品 文 档 和 / 或 软 件 产 品 的 联 机 文 档 中, 使 用 本 产 品, 表 明 您 已 阅 读 并 接 受 了 EULA 的 条 款 版 权 所 有 安 徽 科 大 讯 飞 信 息 科 技 股 份 有 限 公 司 Copyright 2014 ANHUI USTC iflytek CO., LTD.
1. 概 述 本 文 档 是 开 发 科 大 讯 飞 ios 语 音 程 序 的 用 户 指 南, 定 义 了 语 音 听 写 语 音 合 成 语 义 理 解 以 及 个 性 化 相 关 接 口 的 使 用 说 明 和 体 系 结 构, 所 有 接 口 必 需 在 联 网 状 态 下 才 能 正 常 使 用 其 适 用 的 读 者 为 使 用 语 音 SDK 进 行 开 发 的 产 品 设 计 师 软 件 工 程 师, 通 过 阅 读 本 文 档, 读 者 可 以 掌 握 如 何 集 成 和 使 用 语 音 合 成 语 音 听 写 和 语 法 识 别 服 务 2. MSC 概 述 科 大 讯 飞 MSC SDK 可 以 为 开 发 者 提 供 语 音 听 写 语 音 合 成 语 义 理 解 上 传 下 载 等 功 能, 如 图 3-1 所 示 SDK 业 务 类 型 语 音 听 写 语 义 识 别 IFlySpeechRecognizer IFlyRecognizerView IFlySetting 系 统 设 置 语 音 合 成 IFlySpeechSynthesizer IFlyUserWords 用 户 词 表 个 性 化 上 传 IFlyDataUploader IFlyContact 联 系 人 个 性 化 下 载 IFlyDataDownloader MSC API 图 3-1 MSC 功 能 结 构 图 3. 搭 建 开 发 环 境 [1] 在 Xcode 中 建 立 你 的 工 程 [2] 将 开 发 工 具 包 中 lib 目 录 下 的 iflymsc.framework 添 加 到 新 建 工 程 中 ( 如 下 图 所 示 ) 1
2 科 大 讯 飞 MSC 开 发 指 南
3 科 大 讯 飞 MSC 开 发 指 南
[3] 按 下 图 添 加 SDK 所 需 要 的 ios 库 注 意 : 对 应 ios6 以 下 版,AdSupport.framework 设 置 为 Optional, 以 上 版 本 为 Required [5] 确 认 SDK 的 路 径 4
请 确 认 上 图 红 色 部 分 的 路 径 能 够 找 到 iflymsc.framework 为 了 支 持 多 人 开 发, 建 议 双 击 红 色 部 分, 把 路 径 改 为 相 对 路 径, 例 如 像 下 图 所 示 注 意 : 请 把 不 必 要 的 路 径 删 除 例 如 更 新 了 SDK 后, 新 的 SDK 与 旧 的 SDK 不 在 同 一 路 径, 请 把 旧 的 路 径 删 除, 避 免 引 用 到 旧 的 库 对 应 集 成 SDK 后 发 现 编 译 失 败, 提 示 找 不 到 头 文 件, 请 先 检 查 这 个 路 径 是 否 正 确 [6] 在 你 需 要 使 用 MSC 服 务 的 文 件 中 导 入 相 应 的 头 文 件 例 如 : // 带 界 面 的 语 音 识 别 控 件 #import iflymsc/iflyrecognizerviewdelegate.h #import iflymsc/iflyrecognizerview.h // 不 带 界 面 的 语 音 识 别 控 件 #import iflymsc/iflyspeechrecognizerdelegate.h #import iflymsc/iflyspeechrecognizer.h // 不 带 界 面 的 语 音 合 成 控 件 #import iflymsc/iflysynthesizerdelegate.h #import iflymsc/iflysynthesizer.h 5
[7] 集 成 帮 助 文 档 到 Xcode 打 开 终 端 (termainl 或 iterm),cd 到 压 缩 包 的 doc 目 录, 执 行 以 下 命 令 : cp -R -f -a com.iflytek.documentation.iflymsc.docset ~/Library/Developer/Shared/Documentation/DocSets/ 然 后 执 行 命 令 open ~/Library/Developer/Shared/Documentation/DocSets/ 请 核 对 文 档 的 版 本 为 最 新 下 载 的 版 本 6
打 开 Xcode 的 帮 助 文 档 就 可 以 看 到 已 经 集 成 的 文 档 7
4. 在 代 码 中 使 用 开 发 工 具 包 [1] 登 录 示 例 用 户 只 有 在 登 录 状 态 才 能 进 行 数 据 上 传 下 载 语 义 搜 索 密 码 文 本 下 载 等 个 性 化 操 作 建 议 开 发 者 在 所 有 语 音 服 务 之 前 调 用 登 录 接 口 登 录 类 名 是 IFlySpeechUser synchronouslogin 是 同 步 登 录, 并 不 用 等 待 onend 结 束 代 理 login 是 异 步 登 录, 需 要 注 册 onend 结 束 代 理 islogin 是 查 询 当 前 是 否 登 录 成 功 使 用 示 例 如 下 图 所 示 // 注 册 用 户 登 录 需 要 上 传 用 户 名 和 密 码, 非 匿 名 方 式 // 用 户 名 和 密 码 传 nil, 表 示 使 用 匿 名 方 式 进 行 登 录, 每 台 设 备 具 备 唯 一 性, 建 议 使 用 此 种 方 式 NSString * loginstring = [[NSString alloc] initwithformat:@ appid=%@,appid]; IFlySpeechUser *loginuser = [[IFlySpeechUser alloc] initwithdelegate:self]; [loginuser synchronouslogin:nil pwd:nil param:loginstring]; [2] 语 音 转 写 ( 带 界 面 示 例 ) 8
使 用 示 例 如 下 图 所 示 // 代 码 从 MscDemo 中 摘 录,MscDemo 在 下 载 开 发 包 时 附 带 在 内 部, 建 议 使 用 SDK 前 仔 细 阅 读 // 使 用 不 带 界 面 的 语 音 识 别 功 能 // 头 文 件 定 义 // IFlyRecognizerViewDelegate 为 识 别 回 话 的 服 务 代 理 @interface ISRTextView : UIView <IFlyRecognizerViewDelegate> IFlyRecognizerView *_iflyrecognizerview; // 创 建 识 别 对 象 NSString *initstring = [[NSString alloc] initwithformat:@ appid=%@,appid]; iflyrecognizerview = [IFlyRecognizerView alloc] initwithcenter:cgpointmake(0,0) initparam:initstring]; // 设 置 识 别 参 数 [_iflyrecognizerview setparameter:@ domain value:@ iat ];// 普 通 听 写 服 务 [_iflyrecognizerview setparameter:@ sample_rate value:@ 16000 ];// 录 音 采 样 率 为 16k [_iflyrecognizerview setparameter:@ vad_bos value:@ 1800 ];// 前 端 点 检 测 时 间 [_iflyrecognizerview setparameter:@ vad_eos value:@ 6000 ];// 后 端 点 检 测 时 间 [_iflyrecognizerview setparameter:@ language value:@ zh_cn ];// 识 别 内 容 为 中 文 [_iflyrecognizerview setparameter:@ accent value:@ mandarin ];// 识 别 普 通 话 // 启 动 识 别 服 务 [iflyrecognizerview start]; // 识 别 会 话 代 理 // 识 别 结 果 返 回 代 理 -(void) onresult:(iflyrecognizer *)iflyrecognizerview theresult:(nsarray *) resultarray // 识 别 结 果 保 存 在 resultarray 中, 会 实 时 的 将 识 别 结 果 通 过 onresult 返 回, 开 发 者 需 要 手 动 的 拼 接 识 别 结 果 // 识 别 会 话 结 束 代 理 -(void)onend:(iflyrecognizerview *)iflyrecognizerview theerror:(iflyspeecherror *)error // IFlySpeechError 是 错 误 描 述 类, 包 含 _errorcode 错 误 码 和 _errortype 两 个 属 性 和 相 关 接 口 // 正 常 情 况 下 会 话 结 束 时 错 误 码 为 0 if(!error errorcode) 9
[3] 语 音 合 成 ( 不 带 界 面 示 例 ) 使 用 示 例 如 下 图 所 示 // 使 用 不 带 界 面 的 语 音 合 成 功 能 // 头 文 件 定 义 // IFlySpeechSynthesizerDelegate 为 合 成 回 话 的 服 务 代 理 @interface TTSTextView : UIView <IFlySpeechSynthesizerDelegate> IFlySpeechSynthesizer *_iflyspeechsynthesizer; // 创 建 合 成 对 象 NSString *initstring = [[NSString alloc] initwithformat:@ appid=%@,appid]; _iflyspeechsynthesizer = [IFlySpeechSynthesizer createwithparams:initstring delegate:self]; _iflyspeechsynthesizer.delegate = self; // 设 置 合 成 参 数 [_iflyspeechsynthesizer setparameter:@ speed value:@ 50 ];// 设 置 播 放 速 度 [_iflyspeechsynthesizer setparameter:@ volume value:@ 50 ];// 设 置 播 放 音 量 [_iflyspeechsynthesizer setparameter:@ voice_name value:@ xiaoyan ];// 设 置 发 音 人 为 小 燕 [_iflyspeechsynthesizer setparameter:@ sample_rate value:@ 8000 ];// 设 置 采 样 率 为 8k [_iflyspeechsynthesizer setparameter:@ tts_audio_path value:@ sample.pcm ];// 设 置 合 成 音 频 保 存 路 径 // 启 动 合 成 会 话 [_iflyspeechsynthesizer startspeaking:@ 你 好, 我 是 科 大 讯 飞 的 小 燕 ]; // 合 成 会 话 代 理 // 合 成 结 果 代 理, 此 代 理 必 须 要 实 现 -(void) oncompleted:(iflyspeecherror*) error // IFlySpeechError 是 错 误 描 述 类, 包 含 _errorcode 错 误 码 和 _errortype 两 个 属 性 和 相 关 接 口 // 正 常 情 况 下 会 话 结 束 时 错 误 码 为 0 if(!error errorcode) // 失 败, 返 回 非 0 错 误 码 else 10
[4] 语 义 示 例 使 用 示 例 如 下 图 所 示 使 用 语 义 前 需 要 首 先 确 保 对 应 的 appid 已 经 开 通 语 义 功 能 目 前 语 义 与 语 音 识 别 使 用 同 一 套 技 术 通 道 IFlyRecognizerView // 创 建 语 义 识 别 对 象 NSString *initstring = [[NSString alloc] initwithformat:@ appid=%@,appid]; iflyrecognizerview = [IFlyRecognizerView alloc] initwithcenter:cgpointmake(0,0) initparam:initstring]; // 设 置 识 别 参 数 [_iflyrecognizerview setparameter:@ domain value:@ iat ];// 普 通 听 写 服 务 [_iflyrecognizerview setparameter:@ sample_rate value:@ 16000 ];// 录 音 采 样 率 为 16k [_iflyrecognizerview setparameter:@ vad_bos value:@ 1800 ];// 前 端 点 检 测 时 间 [_iflyrecognizerview setparameter:@ vad_eos value:@ 6000 ];// 后 端 点 检 测 时 间 [_iflyrecognizerview setparameter:@ asr_sch value:@ 1 ];// 开 启 语 义 处 理 [_iflyrecognizerview setparameter:@ plain_result value:@ 0 ];// 不 解 析 识 别 内 容 [_iflyrecognizerview setparameter:@ params value:@ scn=weather ];// 语 义 场 景 为 天 气 注 意 语 义 与 语 音 识 别 的 设 置 区 别 在 后 三 行 语 义 结 果 也 是 通 过 onresult 返 回, 语 义 结 果 是 xml 形 式 的 文 本 内 容 // 启 动 识 别 服 务 [iflyrecognizerview start]; [5] // 识 上 别 传 会 话 联 代 系 理 人 // 识 别 结 果 返 回 代 理 使 -(void) 用 示 例 onresult:(iflyrecognizer 如 下 图 所 示 *)iflyrecognizerview theresult:(nsarray *) resultarray // 识 别 结 果 保 存 在 resultarray 中, 会 实 时 的 将 识 别 结 果 通 过 onresult 返 回, 开 发 者 需 要 手 动 的 拼 // 接 使 识 用 别 上 结 传 果 联 系 人 前, 请 确 保 已 经 登 录, 否 则 会 造 成 上 传 联 系 人 不 成 功 if(![iflyspeechuser islogin]) return; SpeechUnderstander speechunderstander = new SpeechUnderstander(); // 清 空 Grammar_ID, 防 止 语 义 理 解 后 进 行 语 义 理 解 时 Grammar_ID 的 干 扰 // 获 取 speechunderstander.setparameter(speechconstant.cloud_grammar, 手 机 通 讯 录 内 容 null); IFlyContact // 设 置 *iflycontact 语 义 理 解 的 = 引 [[IFlyContact 擎 alloc] init]; NSString speechunderstander.setparameter(speechconstant.domain, *contactstring=[iflycontact contact]; "iat"); // 设 置 采 样 率 参 数, 支 持 8K 和 16K // 创 建 speechunderstander.setparameter(speechconstant.sample_rate, 上 传 对 象 "16000"); IFlyDataUploader // 默 认 使 用 开 *uploader 放 语 义 2.0 =[IFlyDataUploader 协 议, 返 回 JSON alloc] 结 果 initwithdelgate:nil ; pwd:nil params:nil delegate:self]; 且 需 要 在 开 放 语 义 平 台 (http://osp.voicecloud.cn) 上 进 行 配 置 // 上 传 /* 通 如 讯 需 录 使 用 旧 版 开 放 语 义 协 议, 需 添 加 如 下 代 码 : [uploader *speechunderstander.setparameter(speechconstant.nlp_version, uploaddata:@ contact params:@ subject=uup,dtt=contact data: contactstring]; null); // 上 传 speechunderstander.setparameter(speechconstant.result_type, 回 调 处 理 "xml");*/ -(void) speechunderstander.startunderstanding(understanderlistener); onend:(iflydatauploader*) uploader grammerid: (NSString*) grammerid error: (IFlySpeechError*) SpeechUnderstanderListener error understanderlistener 11 = new SpeechUnderstanderListener() // 上 传 成 /**SpeechUnderstanderListener 功 其 它 回 调 接 口 if(![error * errorcode]) 出 错 情 况 下 回 调 onerror 接 口, 正 常 返 回 结 果 通 过 onresult 回 调 接 口 */
[6] 用 户 词 表 的 上 传 与 下 载 使 用 示 例 如 下 图 所 示 // 在 上 传 用 户 词 表 前, 先 登 录 // 用 户 词 表 #define USERWORDS @"\"userword\":[\"name\":\"iflytek\",\"words\":[\" 科 大 讯 飞 \",\" 云 平 台 \",\" 用 户 词 条 1\",\" 开 始 上 传 词 条 \"]]" IFlyUserWords *iflyuserwords = [[IFlyUserWords alloc] initwithjson:userwords]; // 创 建 上 传 对 象 IFlyDataUploader *uploader =[IFlyDataUploader alloc] initwithdelgate:nil pwd:nil params:nil delegate:self]; // 上 传 词 表 [uploader uploaddata:@ userwords params:@ @"sub=iat,dtt=userword" data: [iflyuserwords tostring]]; // 上 传 回 调 处 理 -(void) onend:(iflydatauploader*) uploader grammerid: (NSString*) grammerid error: (IFlySpeechError*) error // 上 传 成 功 if(![error errorcode]) NSLog(@ 上 传 成 功,grammerID 是 :%@, grammerid); 12
[7] abnf 语 法 上 传 示 例 使 用 示 例 如 下 图 所 示 // 上 传 语 法 需 要 先 进 行 登 录 操 作, 请 参 考 登 录 示 例 // ABNF 语 法 示 例, 可 以 说 北 京 到 上 海 #define ABNFPARAM @ sub=asr,dtt=abnf #define ABNFDATA = #ABNF 1.0 gb2312; language zh-cn; mode voice; root $main; $main = $place1 到 $place2 ; $place1 = 北 京 武 汉 南 京 天 津 天 京 东 京 ; $place2 = 上 海 合 肥 ; // 创 建 上 传 对 象 IFlyDataUploader *uploader =[IFlyDataUploader alloc] initwithdelgate:nil pwd:nil params:nil delegate:self]; // 上 传 abnf 语 法 [uploader uploaddata:@ abnf params:@ sub=asr,dtt=abnf data: ABNFDATA]; // 上 传 回 调 处 理 -(void) onend:(iflydatauploader*) uploader grammerid: (NSString*) grammerid error: (IFlySpeechError*) error // 上 传 成 功 if(![error errorcode]) 13 NSLog(@ 上 传 成 功,grammerID 是 :%@, grammerid);
5. 附 录 1. 识 别 结 果 说 明 json 字 段 英 文 全 称 类 型 说 明 sn sentence int 第 几 句 ls last sentence boolean 是 否 最 后 一 句 bg begin int 开 始 ed end int 结 束 ws words array 词 cw chinese word array 中 文 分 词 w word string 单 字 sc socre int 分 数 转 写 结 果 示 例 : "sn":1,"ls":true,"bg":0,"ed":0,"ws":["bg":0,"cw":["w":" 今 天 ","sc":0],"bg":0,"cw":["w":" 的 ","sc":0],"bg":0,"cw":["w":" 天 气 ","sc":0],"bg":0,"cw":["w":" 怎 么 样 ","sc":0],"bg":0,"cw":["w":" ","sc":0]] 多 候 选 结 果 示 例 : "sn":1,"ls":false,"bg":0,"ed":0,"ws":[ "bg":0,"cw":["w":" 我 想 听 ","sc":0], "bg":0,"cw":["w":" 拉 德 斯 基 进 行 曲 ","sc":0,"w":" 拉 得 斯 进 行 曲 ","sc":0]] 语 法 识 别 结 果 示 例 : "sn":1,"ls":true,"bg":0,"ed":0,"ws":[ "bg":0,"cw":["sc":"70","gm":"0","w":" 北 京 到 上 海 ", "sc":"69","gm":"0","w":" 天 京 到 上 海 ", 14
] ] "sc":"58","gm":"0","w":" 东 京 到 上 海 " 2. 个 性 发 音 人 列 表 1 语 言 为 中 英 文 的 发 音 人 可 以 支 持 中 英 文 的 混 合 朗 读 2 英 文 发 音 人 只 能 朗 读 英 文, 中 文 无 法 朗 读 3 汉 语 发 音 人 只 能 朗 读 中 文, 遇 到 英 文 会 以 单 个 字 母 的 方 式 进 行 朗 读 发 音 人 名 称 属 性 语 言 参 数 名 称 备 注 小 燕 青 年 女 声 中 英 文 ( 普 通 话 ) xiaoyan 默 认 小 宇 青 年 男 声 中 英 文 ( 普 通 话 ) xiaoyu 凯 瑟 琳 青 年 女 声 英 文 Catherine 亨 利 青 年 男 声 英 文 henry 玛 丽 青 年 女 声 英 文 vimary 小 研 青 年 女 声 中 英 文 ( 普 通 话 ) vixy 小 琪 青 年 女 声 中 英 文 ( 普 通 话 ) vixq 小 峰 青 年 男 声 中 英 文 ( 普 通 话 ) vixf 小 梅 青 年 女 声 中 英 文 ( 粤 语 ) vixm 小 莉 青 年 女 声 中 英 文 ( 台 湾 普 通 话 ) vixl 小 蓉 青 年 女 声 汉 语 ( 四 川 话 ) vixr 小 芸 青 年 女 声 汉 语 ( 东 北 话 ) vixyun 小 坤 青 年 男 声 汉 语 ( 河 南 话 ) vixk 小 强 青 年 男 声 汉 语 ( 湖 南 话 ) vixqa 小 莹 青 年 女 声 汉 语 ( 陕 西 话 ) vixying 小 新 童 年 男 声 汉 语 ( 普 通 话 ) vixx 楠 楠 童 年 女 声 汉 语 ( 普 通 话 ) vinn 老 孙 老 年 男 声 汉 语 ( 普 通 话 ) vils Mariane 法 语 Mariane Guli 维 语 Guli Allabent 俄 语 Allabent Gabriela 西 班 牙 语 Gabriela Abha 印 地 语 Abha XiaoYun 越 南 语 XiaoYun 15
3. 错 误 码 列 表 1 10000~19999 的 错 误 码 参 见 MSC 错 误 码 链 接 2 其 它 错 误 码 参 见 下 表 错 误 码 错 误 值 意 义 ERROR_NO_NETWORK 20001 网 络 连 接 断 开 ERROR_NETWORK_TIMEOUT 20002 网 络 连 接 超 时 ERROR_NET_EXPECTION 20003 网 络 交 互 异 常 ERROR_INSUFFICIENT_PERMISSIO NS 20004 应 用 程 序 授 权 不 足 ERROR_INVALID_RESULT 20005 返 回 结 果 为 空 ERROR_SERVER_CONNECT 20006 无 法 连 接 到 服 务 器 ERROR_INVALID_PARAM 20007 无 效 的 参 数 ERROR_CLIENT 20008 客 户 端 应 用 程 序 错 误 ERROR_AUDIO_RECORD 20009 麦 克 初 始 化 错 误 ERROR_NO_MATCH 20010 无 匹 配 的 识 别 结 果 ERROR_SPEECH_TIMEOUT 20011 无 有 效 的 音 频 输 入 ERROR_INVALID_ENCODING 20012 无 效 的 编 码 ERROR_EMPTY_UTTERANCE 20013 合 成 或 上 传 数 据 为 空 ERROR_FILE_ACCESS 20014 文 件 读 写 错 误 ERROR_PLAY_MEDIA 20015 合 成 音 频 播 放 中 发 生 错 误 ERROR_MEMORY_WRANING 20016 存 储 空 间 不 足 ERROR_TEXT_OVERFLOW 20017 参 数 个 数 超 过 限 制 ERROR_LOGIN 20018 登 录 错 误 ERROR_IN_USE 20019 多 路 会 话 并 发 错 误 ERROR_INVALID_DATA 20020 客 户 端 数 据 解 析 错 误 ERROR_INVALID_GRAMMAR 20021 识 别 语 法 错 误 ERROR_INVALID_LOCAL_RESOURC E 20022 服 务 端 资 源 错 误 ERROR_LOGIN_INVALID_USER 20023 用 户 ID 无 效 ERROR_LOGIN_INVALID_PWD 20024 用 户 密 码 无 效 ERROR_PERMISSION_DENIED 20025 引 擎 授 权 错 误 16
17 科 大 讯 飞 MSC 开 发 指 南