在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:react-native-baidu-asr开源软件地址:https://gitee.com/gdoudeng/react-native-baidu-asr开源软件介绍:react-native-baidu-asr
English | 简体中文 预览
支持平台
当前并未实现iOS平台,我有空会补上。 安装
使用
首先是你先要去 百度语音控制台创建一个应用,拿到鉴权信息:AppID,API Key,Secret Key。
import { BaiduAsr, StatusCode, IBaseData, RecognizerResultError, RecognizerResultData, VolumeData} from 'react-native-baidu-asr';// 初始化百度语音引擎BaiduAsr.init({ APP_ID: '你的鉴权信息AppID', APP_KEY: '你的鉴权信息API Key', SECRET: '你的鉴权信息Secret Key',});// 处理识别结果this.resultListener = BaiduAsr.addResultListener(this.onRecognizerResult);// 处理错误结果this.errorListener = BaiduAsr.addErrorListener(this.onRecognizerError);// 处理音量大小this.volumeListener = BaiduAsr.addAsrVolumeListener(this.onAsrVolume);// 开始语音识别// 更多输入参数请参考百度语音文档// https://ai.baidu.com/ai-doc/SPEECH/bkh07sd0m#asr_start-%E8%BE%93%E5%85%A5%E4%BA%8B%E4%BB%B6%E5%8F%82%E6%95%B0BaiduAsr.start({ // 长语音 VAD_ENDPOINT_TIMEOUT: 0, BDS_ASR_ENABLE_LONG_SPEECH: true, // 禁用标点符号 DISABLE_PUNCTUATION: true,});
首先是先导出 唤醒词 ,预定义唤醒词和自定义唤醒词,均需通过唤醒词评估工具进行导出使用。 import { BaiduWakeUp } from 'react-native-baidu-asr';// 初始化百度语音引擎BaiduWakeUp.init({ APP_ID: '你的鉴权信息AppID', APP_KEY: '你的鉴权信息API Key', SECRET: '你的鉴权信息Secret Key',});// 唤醒结果this.resultListener = BaiduWakeUp.addResultListener(this.onWakeUpResult);// 处理错误结果this.errorListener = BaiduWakeUp.addErrorListener(this.onWakeUpError);// 开始语音唤醒// 更多输入参数请参考百度语音文档// https://ai.baidu.com/ai-doc/SPEECH/bkh07sd0m#wakeup_start-%E8%BE%93%E5%85%A5%E4%BA%8B%E4%BB%B6%E5%8F%82%E6%95%B0BaiduWakeUp.start({ //表示WakeUp.bin文件定义在assets目录下 WP_WORDS_FILE: 'assets:///WakeUp.bin',});
语音合成的鉴权信息放在 然后需要在api level 28 以上编译的话,还需要修改 <application android:name=".MainApplication" android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:theme="@style/AppTheme"> <!-- 加这一句。支持api level 28 以上编译--> <uses-library android:name="org.apache.http.legacy" android:required="false"/> // ...</application> import { BaiduSynthesizer, SynthesizerData, SynthesizerResultData, SynthesizerResultError,} from 'react-native-baidu-asr';// 初始化BaiduSynthesizer.initialTts();// 监听事件this.resultListener = BaiduSynthesizer.addResultListener( this.onSynthesizerResult,);this.errorListener = BaiduSynthesizer.addErrorListener( this.onSynthesizerError,);// 语音合成BaiduSynthesizer.speak( this.state.text, // 更多输入参数请参考百度文档 https://ai.baidu.com/ai-doc/SPEECH/Pk8446an5 { PARAM_SPEAKER: '1', }, status => { console.log('speak --> ', status); },);// 批量播放BaiduSynthesizer.batchSpeak( [ '开始批量播放', '123456', '欢迎使用百度语音', '重(chong2)量这个是多音字示例', ], // 更多输入参数请参考百度文档 https://ai.baidu.com/ai-doc/SPEECH/Pk8446an5 { PARAM_SPEAKER: '1', }, status => { console.log('batchSpeak --> ', status); },); API语音识别Methods
初始化百度语音引擎
开始语音识别
暂停录音,SDK不会再识别停止后的录音。
取消录音,SDK会取消本次识别,回到原始状态。
释放资源,下次需要再次使用的话必须再调用 Events识别结果回调数据有一个统一格式的,类似与api接口返回一样,有code,msg,data。
interface IBaseData<T = any> { /** * 状态码 */ code: StatusCode, /** * 消息 */ msg: string, /** * 数据 */ data: T}
其中 interface RecognizerResultData { best_result: string, // 如无意外 取第一个值就是识别结果 results_recognition: Array<string>, result_type: ResultType, origin_result: { corpus_no: number, err_no: number, raf: number, result: { word: Array<string> }, sn: string }, error: number, desc: string}
其中 interface RecognizerResultError { errorCode: number // 错误码对照百度语音文档 https://ai.baidu.com/ai-doc/SPEECH/qk38lxh1q subErrorCode: number descMessage: string}
语音唤醒Methods
初始化百度语音引擎
开始语音唤醒
结束语音唤醒。
释放资源,下次需要再次使用的话必须再调用 Events唤醒结果回调数据有一个统一格式的,类似与api接口返回一样,有code,msg,data。
interface IBaseData<T = any> { /** * 状态码 */ code: StatusCode, /** * 消息 */ msg: string, /** * 数据 */ data: T}
其中 interface WakeUpResultError { // 错误码 可以对照百度语音文档查找错误码 https://ai.baidu.com/ai-doc/SPEECH/qk38lxh1q#%E5%94%A4%E9%86%92%E9%94%99%E8%AF%AF%E7%A0%81 errorCode: number, // 错误消息 errorMessage: string, // 百度语音返回的原初错误数据 result: string} 语音合成Methods
初始化百度语音合成引擎
合成并播放
批量播放。
暂停播放。仅调用speak后生效
继续播放。仅调用speak后生效,调用pause生效
停止合成引擎。即停止播放,合成,清空内部合成队列。
释放资源。下次需要再次使用的话必须再调用 Events回调数据有一个统一格式的,类似与api接口返回一样,有code,msg,data。
interface SynthesizerData<T = any> { /** * 状态码 */ code: SynthesizerStatusCode, /** * 消息 */ msg: string, /** * 数据 */ data: T}
其中 // 合成过程中有很多种状态 从初始化开始 到 合成 到播放结束 所以data其实是不定的interface RecognizerResultData { // 话语id utteranceId?: string // 合成进度或者播放进度 progress?: number}
其中 interface SynthesizerResultError { // 话语id utteranceId: string // 错误码 详细查看百度文档 https://ai.baidu.com/ai-doc/SPEECH/qk844cpcs code: number // 错误描述 description: string} 减少apk体积如果直接接入的话,你会发现apk包体积会瞬间暴增了10几兆,这是因为现在有 5个架构目录: 而且语音识别与语音唤醒都要有,还有语音合成,所以每个架构都的so文件都要保留,但是没必要每个架构都有的其实,现在国内应用市场是仍然需要上传32位架构的apk,但是Google市场早就要求上传64位了,国内小米,oppo,vivo也说开始联手强制开发者以后必须且只能上传64位结构的apk。安卓APP升级64位架构的相关通知。 所以目前我建议是分开架构打包,32位和64位分开打包,这样可以减少包体积,但是注意如果你接入了其他sdk,那么也要保证有对应架构的so文件。 具体操作可以参考example的build.gradle 如果这样还是有用户对apk体积有比较高的要求的话,后面版本可能会考虑用户自行导入所需so库,例如你只需要语音识别,其他都不需要,那么有一些so文件是不用导入的。 Contribute期待提出有关建议,欢迎做出贡献,感谢star。 鸣谢本库使用create-react-native-module创建 create-react-native-module --native-package-id cn.beemango.baidu.asr --author-name DengWeibin --author-email [email protected] --github-account gdoudeng --generate-example BaiduAsr License |
请发表评论