模块名称:Qn机读文本 模块作者:白凉凉Official【精易论坛:琪诺兔】 模块版本:2.2 模块 MD5:a292537a4a6a919111fcc5252d850db0 模块大小:45.57 KB 版权声明: 模块描述:封装了SAPI.SpVoice和SAPI.SpFileStream和讯飞5的基本常用功能大部分需求都可以轻松实现 模块备注: 封装了SAPI.SpVoice和SAPI.SpFileStream和讯飞5的基本常用功能大部分需求都可以轻松实现 引用支持库: 系统核心支持库 5.7|krnln|d09f2340818511d396f6aaf844c7e325 特殊功能支持库 3.1|spec|A512548E76954B6E92C21055517615B0 ------------------------------ .程序集 Qn机读文本, , 公开 .子程序 创建, 逻辑型, , 使用前必须先成功创建SAPI.SpVoice否则其他功能将无法使用,成功返回真,失败返回假。 .子程序 到文件, 逻辑型, , 为不影响其他功能将会创建新的临时引擎把文本转换为语音输出到WAV文件,成功返回真,失败返回假,采用同步执行方式会卡住线程,即执行完毕后才返回,并释放线程。 .参数 文本, 文本型, , 欲合成的文本 .参数 库名称, 文本型, , 语音库名称 .参数 文件名, 文本型, , 保存声音文件的全路径文件名称,注文件不可已存在,后缀名必须是(.wav) .子程序 等待, 逻辑型, , 等待正在朗读的线程,不使用本子程序语音将会在后台线程播放,不影响程序执行,注意:因为等待会卡住本线程的执行,会导致[回调]被延迟处理,所以最好不要同时使用等待和[回调],请在朗读开始后调用本子程序。 .参数 超时直, 整数型, , 单位为毫秒,如果大于0将等待直到语音输出完毕或超时才释放主进程,如果小于0表示不设超时时间,等待直到语音输出完毕才释放主进程 .子程序 回调, , , 动态取正在朗读文本的当前朗读位置和形态,请在朗读开始后调用本子程序。 .参数 回调函数, 子程序指针, , 当语音输出状态被改变时,会自动调用该函数。该函数有三个参数:参数一是[逻辑型],表示输出是否已结束;参数二和参数三为[整数型],分别表示当前语音输出在提供朗读的数据中的位置和长度。 .子程序 继续, 逻辑型, , 继续被暂停的朗读,成功返回真,失败返回假。 .子程序 朗读, 逻辑型, , 通过已挂载的音库,把文本转换成为语音输出,成功返回真,失败返回假。 .参数 文本, 文本型, , 欲朗读的文本。 .子程序 列举库, 整数型, , 列举并在本类挂载当前系统所安装的所有可识别语音库并返回名称,会清空并重定义接收数组,返回库数量,如果已经挂载会重新挂载并不会影响当前发音的语音库。 .参数 接收数组, 文本型, 参考 数组, 请提供一个用于接收库名称的[文本型]数组 .子程序 列举名, 整数型, , 列举本类挂载的所有语音库的名称,会清空并重定义接收数组,返回库数量。 .参数 接收数组, 文本型, 参考 数组, 请提供一个用于接收库名称的[文本型]数组 .子程序 取标识, 文本型, , 使用已挂载的语音库名称取地区标识文本,例(“804”=汉语)。 .参数 库名称, 文本型, , 语音库名称 .子程序 取名称, 文本型, , 使用已挂载的序号取讲述人名称。 .参数 库序号, 整数型, , 语音库序号 .子程序 取人数, 整数型, , 取当前有多少个被挂载的库。 .子程序 取数量, 整数型, , 取当前对象识别系统总共有多少个被识别的库,不是挂载了多少个库。 .子程序 取性别, 文本型, , 使用已挂载的语音库名称取性别文本,(“Male”=男)(“Female”=女)。 .参数 库名称, 文本型, , 语音库名称 .子程序 取序号, 整数型, , 使用已挂载的语音库名称取序号。 .参数 库名称, 文本型, , 语音库名称 .子程序 停止, 逻辑型, , 停止正在朗读的文本,成功返回真,失败返回假。 .子程序 销毁, , , 用于手动释放SAPI.SpVoice对象,注,[到文件]不会被该功能销毁。 .子程序 暂停, 逻辑型, , 暂停正在朗读的文本,成功返回真,失败返回假。 .子程序 置声调, 文本型, , 设置已挂载音库的声音音调,成功返回XML标记文本将此文本提供给朗读即可 .参数 文本, 文本型, , 欲朗读的文本 .参数 声调, 整数型, , 默认=0,范围是-10到10之间。 .子程序 置音库, 逻辑型, , 设置当前发音的音库,为参数名称的语音库,成功返回真,失败返回假。 .参数 库名称, 文本型, , 语音库名称 .子程序 置音量, 逻辑型, , 设置已挂载音库的声音大小,成功返回真,失败返回假。 .参数 音量, 整数型, , 默认=50,范围是0到100之间。 .子程序 置语速, 逻辑型, , 设置已挂载音库的语速快慢,成功返回真,失败返回假。 .参数 语速, 整数型, , 默认=0,范围是从-10到10之间。 .程序集 Qn讯飞5机读, , 公开 .子程序 创建, 逻辑型, , 使用前必须创建成功,否则其他功能将无法使用,成功返回真,失败返回假。 .子程序 导出_文本, 逻辑型, , 从文本文件合成到音频文件,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 文件名, 文本型, 参考 , 文本文件的全路径文件名,注意编码用[置编码()]来设置文本内码。 .参数 音频文件名, 文本型, 参考 , 导出音频文件的全路径文件名。 .子程序 导出_字符串, 逻辑型, , 从字符串合成到音频文件,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 字符串, 文本型, 参考 , 欲合成的文本。 .参数 音频文件名, 文本型, 参考 , 导出音频文件的全路径文件名。 .子程序 断开, 逻辑型, , 断开与Fx5服务器的连接,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .子程序 朗读_文件, 逻辑型, , 将文本文件转换为内存语音并播放,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 文件名, 文本型, 参考 , 文本文件的全路径文件名,注意编码用[置编码()]来设置文本内码。 .参数 等待, 逻辑型, 可空 , 默认=真,真=等待,假=不等待,真为等待朗读完成后才返回,假为朗读将会在后台线程中执行不会影响程序运行。 .子程序 朗读_字符串, 逻辑型, , 将文本转换为内存音频并播放,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 字符串, 文本型, 参考 , 欲朗读的文本。 .参数 等待, 逻辑型, 可空 , 默认=真,真=等待,假=不等待,真为等待朗读完成后才返回,假为朗读将会在后台线程中执行不会影响程序运行。 .子程序 连接, 整数型, , 建立与Fx5服务器的连接,成功返回连接句柄,失败返回0。 .参数 序列号, 文本型, 参考 可空 , 默认使用绿化版XXXXXX-XXXXXX-XXXXXX .参数 地址, 文本型, 参考 可空 , 默认=0本地 网络合成,传入服务器IP地址;本地合成,IP参数传入0 .子程序 取版本, 逻辑型, , TTS版本信息,成功返回真,失败返回假。 .参数 sAboutInfo, 文本型, 参考 可空 , .参数 ninfosize, 整数型, 参考 可空 , .子程序 取参数, 逻辑型, , 获得本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 参数, 整数型, , 使用常量#TTS_PARAM_ 包括音频格式,文本内码,语音速度等,需要分别设置 .参数 值, 整数型, 参考 , 用于返回值 .子程序 取错误, 整数型, , 取回功能出错后的错误码。 .子程序 停止, 逻辑型, , 停止正在朗读的文本,成功返回真,失败返回假。 .子程序 销毁, 逻辑型, , 用于手动销毁初始化,本类被销毁时会自动调用本方法,成功返回真,失败返回假。 .子程序 置编码, 逻辑型, , 设置传递给已挂载音库的文本编码,封装TTS_PARAM_CODEPAGE设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 编码, 整数型, 可空 , 使用常量#讯飞5_编码_ 默认=1 .子程序 置参数, 逻辑型, , 设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 参数, 整数型, , 使用常量#讯飞5_参数_ 包括音频格式,文本内码,语音速度等,需要分别设置。 .参数 值, 整数型, , 相对应的参数值。 .子程序 置读法, 逻辑型, , 设置已挂载音库是否读出所有标点符号,封装TTS_PARAM_READALLMARKS设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 读法, 逻辑型, 可空 , 默认=假 .子程序 置风格, 逻辑型, , 设置传递给已挂载音库的朗读停顿风格,封装TTS_PARAM_STALL_STYLE设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 风格, 整数型, 可空 , 使用常量#讯飞5_风格_ 默认=1 .子程序 置格式, 逻辑型, , 设置已挂载音库的声音格式,封装TTS_PARAM_AUDIODATAFMT设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 格式, 整数型, 可空 , 使用常量#讯飞5_格式_ 默认=0 .子程序 置声调, 逻辑型, , 设置已挂载音库的声音声调,封装TTS_PARAM_PITCH设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 声调, 整数型, 可空 , 默认=0,范围是从-500到500之间。 .子程序 置音库, 逻辑型, , 设置当前发音的音库,封装TTS_PARAM_VID设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 音库, 整数型, 可空 , 默认=1,发音人编号,使用常#量讯飞5_发音人_ .子程序 置音量, 逻辑型, , 设置已挂载音库的声音大小,封装TTS_PARAM_VOLUME设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , 连接成功建立后返回的句柄。 .参数 音量, 整数型, 可空 , 默认=0,范围是从-20到20之间。 .子程序 置语速, 逻辑型, , 设置已挂载音库的声音语速,封装TTS_PARAM_SPEED设置本次连接的合成参数,成功返回真,失败返回假。 .参数 句柄, 整数型, , .参数 语速, 整数型, 可空 , 默认=0,范围是从-500到500之间。 .子程序 状态, 逻辑型, , 查询播放状态,不建议使用大概率导致异常,成功返回真,失败返回假。 .参数 状态, 整数型, , 用于接收形态的[整数型]变量。 .程序集 SpFileStream, , 公开 .子程序 创建, 逻辑型, , SAPI.SpFileStream() .子程序 打开, , , Open(参数1, 参数2, 参数3) .参数 参数1, 文本型, , .参数 参数2, 整数型, , 3 .参数 参数3, 逻辑型, , 真 .子程序 关闭, , , Close() .子程序 清除, , , .子程序 取格式, 对象, , Format() .子程序 置对象, , , 重新定义SAPI.SpFileStream对象,注,会完全覆盖原本的SAPI.SpFileStream对象 .参数 对象, 对象, , .子程序 置类型, 逻辑型, , Type(参数) .参数 对象, 对象, , .参数 参数, 整数型, , 22 .程序集 SpVoice, , 公开 .子程序 创建, 逻辑型, , SAPI.SpVoice() .子程序 等待, 逻辑型, , WaitUntilDone .参数 值, 整数型, , .子程序 继续, 逻辑型, , Resume() .子程序 朗读, 逻辑型, , Speak(文本, 参数) .参数 文本, 文本型, , .参数 参数, 整数型, , .子程序 清除, , , .子程序 取标识, 文本型, , GetAttribute(Language) .子程序 取出库, 对象, , Item(序号) .参数 序号, 整数型, , .子程序 取列表, 对象, , GetVoices(Name) .子程序 取名称, 文本型, , GetDescription() .子程序 取数量, 整数型, , Count() .子程序 取位置, 整数型, , Status.InputWordPosition() .子程序 取性别, 文本型, , GetAttribute(Gender) .子程序 取长度, 整数型, , Status.InputWordLength() .子程序 暂停, 逻辑型, , Pause() .子程序 置对象, , , 重新定义SAPI.SpVoice对象,注,会完全覆盖原本的SAPI.SpVoice对象 .参数 对象, 对象, , .子程序 置输出, 逻辑型, , AudioOutputStream(对象) .参数 对象, 对象, , .子程序 置音库, 逻辑型, , Voice(对象) .参数 对象, 对象, , .子程序 置音量, 逻辑型, , Volume(音量) .参数 音量, 整数型, , 范围是0到100之间。 .子程序 置语速, 逻辑型, , Rate(语速) .参数 语速, 整数型, , 范围是从-10到10之间。 .DLL命令 CoInitialize, 整数型, "ole32", "CoInitialize", 公开, .参数 pvReserved, 整数型, , 0 .DLL命令 CoUninitialize, 整数型, "Ole32", "CoUninitialize", 公开, .DLL命令 CreateWaitableTimerA, 整数型, "kernel32", "CreateWaitableTimerA", 公开, .参数 lpTimerAttributes, 整数型, , 0 .参数 bManualReset, 逻辑型, , 0 .参数 lpTimerName, 整数型, , 0 .DLL命令 GetLastError, 整数型, "kernel32", "GetLastError", 公开, 获取错误代码 .DLL命令 SetWaitableTimer, 逻辑型, "kernel32", "SetWaitableTimer", 公开, 定时的时间通过调用 .参数 hTimer, 整数型, , 0 .参数 large_integer, , , 0 .参数 lPeriod, 整数型, , 0 .参数 pfnCompletionRoutine, 整数型, , 0 .参数 lpArgToCompletionRoutine, 整数型, , 0 .参数 fResume, 逻辑型, , 0 .DLL命令 STTSAbout, 逻辑型, "STTSApi.dll", "STTSAbout", 公开, TTS版本信息 .参数 sAboutInfo, 文本型, 传址 , .参数 ninfosize, 整数型, 传址 , .DLL命令 STTSConnect, 整数型, "STTSApi.dll", "STTSConnect", 公开, 建立与TTS服务器的连接,返回连接句柄 .参数 Key, 文本型, 传址 , .参数 IP, 文本型, 传址 , .DLL命令 STTSDeinit, 逻辑型, "STTSApi.dll", "STTSDeinit", 公开, 逆初始化 .DLL命令 STTSDisconnect, 逻辑型, "STTSApi.dll", "STTSDisconnect", 公开, 断开与TTS服务器的连接 .参数 hend, 整数型, , .DLL命令 STTSFile2AudioFile, 逻辑型, "STTSApi.dll", "STTSFile2AudioFile", 公开, 从文本文件合成到音频文件 .参数 hend, 整数型, , .参数 TextFile, 文本型, 传址 , .参数 AudioFile, 文本型, 传址 , .DLL命令 STTSGetParam, 逻辑型, "STTSApi.dll", "STTSGetParam", 公开, 获得本次连接的合成参数 .参数 hend, 整数型, , .参数 parameter, 整数型, , .参数 value, 整数型, 传址 , .DLL命令 STTSInit, 逻辑型, "STTSApi.dll", "STTSInit", 公开, 初始化 .DLL命令 STTSPlayStop, 逻辑型, "STTSApi.dll", "STTSPlayStop", 公开, 播放停止 .DLL命令 STTSPlayString, 逻辑型, "STTSApi.dll", "STTSPlayString", 公开, 播放字符串 .参数 hend, 整数型, , .参数 character, 文本型, 传址 , .参数 asynchronous, 逻辑型, , 真,异步合成;假,同步合成 .DLL命令 STTSPlayTextFile, 逻辑型, "STTSApi.dll", "STTSPlayTextFile", 公开, 播放文本文件 .参数 hend, 整数型, , .参数 PlayTextFile, 文本型, 传址 , .参数 asynchronous, 逻辑型, , 真,异步合成;假,同步合成 .DLL命令 STTSQueryPlayStatus, 逻辑型, "STTSApi.dll", "STTSQueryPlayStatus", 公开, 查询播放状态 .参数 Status, 整数型, 传址 , 播放状态 .DLL命令 STTSSetParam, 逻辑型, "STTSApi.dll", "STTSSetParam", 公开, 设置本次连接的合成参数 .参数 hend, 整数型, , .参数 parameter, 整数型, , 包括音频格式,文本内码,语音速度等,需要分别设置 .参数 value, 整数型, , 相对应的参数值 .DLL命令 STTSString2AudioFile, 逻辑型, "STTSApi.dll", "STTSString2AudioFile", 公开, 从字符串合成到音频文件 .参数 hend, 整数型, , .参数 character, 文本型, 传址 , .参数 AudioFile, 文本型, 传址 , .常量 讯飞5_参数_LOCAL_BASE, "0", 公开, TTS_PARAM_LOCAL_BASE 参数 https://blog.csdn.net/eastlhu/article/details/25436901 .常量 讯飞5_参数_当前可用音库列表, "12", 公开, 当前可用音库列表 | TTS_PARAM_AVAILABLEVID .常量 讯飞5_参数_读出所有标点符号, "13", 公开, 读出所有的标点符号 | TTS_PARAM_READALLMARKS .常量 讯飞5_参数_发音人编号, "3", 公开, 发音人编号 | TTS_PARAM_VID .常量 讯飞5_参数_分句回车符处理, "10", 公开, 分句时对回车符的处理 | TTS_PARAM_ENTERTREAT .常量 讯飞5_参数_设置背景音, "20", 公开, 设置背景音 | TTS_PARAM_BGSOUND .常量 讯飞5_参数_设置预录音, "19", 公开, 设置预录音 | TTS_PARAM_VPTTREAT .常量 讯飞5_参数_输出缓冲区最大长度, "2", 公开, 输出缓冲区的最大长度 | TTS_PARAM_OUTBUFSIZE .常量 讯飞5_参数_输出音频数据声音格式, "5", 公开, 输出音频数据的声音格式 | TTS_PARAM_AUDIODATAFMT .常量 讯飞5_参数_输出音频字节序, "18", 公开, 输出音频的字节序 | TTS_PARAM_BYTEORDER .常量 讯飞5_参数_输入缓冲区最大长度, "1", 公开, 输入缓冲区的最大长度 | TTS_PARAM_INBUFSIZE .常量 讯飞5_参数_数字字符串读法, "15", 公开, 数字字符串的读法 | TTS_PARAM_READNUMBER .常量 讯飞5_参数_停顿风格, "14", 公开, 停顿风格 | TTS_PARAM_STALL_STYLE .常量 讯飞5_参数_文本类型, "17", 公开, 文本类型 | TTS_PARAM_TEXTTYPE .常量 讯飞5_参数_音量, "8", 公开, 音量 | TTS_PARAM_VOLUME .常量 讯飞5_参数_音频数据头格式, "7", 公开, 音频数据头格式 | TTS_PARAM_AUDIOHEADFMT .常量 讯飞5_参数_音调, "9", 公开, 音调 | TTS_PARAM_PITCH .常量 讯飞5_参数_英文文本读法, "16", 公开, 英文文本的读法 | TTS_PARAM_READENGLISH .常量 讯飞5_参数_语速, "6", 公开, 语速 | TTS_PARAM_SPEED .常量 讯飞5_参数_中文文本内码类型, "4", 公开, 中文文本内码类型 | TTS_PARAM_CODEPAGE .常量 讯飞5_参数_最大分句长度, "11", 公开, 最大分句长度 | TTS_PARAM_MAXSENLEN .常量 讯飞5_发音人_男_小宇_中普, "4", 公开, 男-小宇(中文普通话) | TTS_VID_XIAOYV .常量 讯飞5_发音人_女_Sherri_英文, "5", 公开, 女-Sherri(英文) | TTS_VID_SHERRI .常量 讯飞5_发音人_女_小琳_台普, "7", 公开, 女-小琳(台湾普通话) | TTS_VID_XIAOLIN .常量 讯飞5_发音人_女_小美_中英粤, "3", 公开, 女-小美(中英文粤语) | TTS_VID_XIAOMEI .常量 讯飞5_发音人_女_小倩_中普, "6", 公开, 女-小倩(中文普通话) | TTS_VID_XIAOQIAN .常量 讯飞5_发音人_女_小燕_中普, "2", 公开, 女-小燕(中文普通话) | TTS_VID_XIAOYAN .常量 讯飞5_格式_ADPCMG7216K4B1C, "18", 公开, ADPCM格式 采样率 6K 码速率 24Kbps | TTS_ADF_ADPCMG7216K4B1C .常量 讯飞5_格式_ADPCMG7218K4B1C, "17", 公开, ADPCM格式 采样率 8K 码速率 32Kbps | TTS_ADF_ADPCMG7218K4B1C .常量 讯飞5_格式_ADPCMG7233B1C, "19", 公开, ADPCM格式 采样率 8K 码速率 24Kbps | TTS_ADF_ADPCMG7233B1C .常量 讯飞5_格式_ADPCMG7235B1C, "20", 公开, ADPCM格式 采样率 8K 码速率 40Kbps | TTS_ADF_ADPCMG7235B1C .常量 讯飞5_格式_ALAW11K1C, "13", 公开, ALAW格式 采样率 11K | TTS_ADF_ALAW11K1C .常量 讯飞5_格式_ALAW16K1C, "9", 公开, ALAW格式 采样率 16K | TTS_ADF_ALAW16K1C .常量 讯飞5_格式_ALAW8K1C, "11", 公开, ALAW格式 采样率 8K | TTS_ADF_ALAW8K1C .常量 讯飞5_格式_DEFAULT, "0", 公开, 当前音库的缺省输出数据格式 各种声音格式 | TTS_ADF_DEFAULT .常量 讯飞5_格式_PCM11K16B1C, "6", 公开, PCM格式 采样率 11K 16bit线性量化 | TTS_ADF_PCM11K16B1C .常量 讯飞5_格式_PCM11K8B1C, "5", 公开, PCM格式 采样率 11K 8bit线性量化 | TTS_ADF_PCM11K8B1C .常量 讯飞5_格式_PCM16K16B1C, "4", 公开, PCM格式 采样率 16K 16bit线性量化 | TTS_ADF_PCM16K16B1C .常量 讯飞5_格式_PCM16K8B1C, "2", 公开, PCM格式 采样率 16K 8bit线性量化 | TTS_ADF_PCM16K8B1C .常量 讯飞5_格式_PCM8K16B1C, "3", 公开, PCM格式 采样率 8K 16bit线性量化 | TTS_PCM8K16B1C .常量 讯飞5_格式_PCM8K8B1C, "1", 公开, PCM格式 采样率 8K 8bit线性量化 || TTS_ADF_PCM8K8B1C .常量 讯飞5_格式_ULAW11K1C, "14", 公开, ULAW格式 采样率 11K | TTS_ADF_ULAW11K1C .常量 讯飞5_格式_ULAW16K1C, "10", 公开, ULAW格式 采样率 16K | TTS_ADF_ULAW16K1C .常量 讯飞5_格式_ULAW8K1C, "12", 公开, ULAW格式 采样率 8K | TTS_ADF_ULAW8K1C .常量 讯飞5_格式_VOX6K1C, "21", 公开, VOX格式 采样率 6K | TTS_ADF_VOX6K1C .常量 讯飞5_格式_VOX8K1C, "22", 公开, VOX格式 采样率 8K | TTS_ADF_VOX8K1C .常量 讯飞5_内码_Big5, "3", 公开, BIG5 | TTS_CP_BIG5 文本内码 .常量 讯飞5_内码_Gb2312, "1", 公开, GB-2312 | TTS_CP_GB2312 文本内码 .常量 讯飞5_内码_Gbk, "2", 公开, GBK | TTS_CP_GBK 文本内码 .常量 讯飞5_内码_Unicode, "4", 公开, UNICODE | TTS_CP_UNICODE 文本内码
Qn机读文本 v2.2