百度长语音SDK到RN的集成

1 篇文章 0 订阅
1 篇文章 0 订阅

react-native-bdVoice(百度长语音)

语音问答模块使用的是百度语音,在百度官网下载了百度语音的SDK,并封装成npm原生模块,使用的时候,只要npm install到自己的项目中,即可使用。长按按钮,开始讲话,松开按钮,停止录音,讲话的时候,实时将录音转换为文字。
我已经将该SDK封装完毕


语音包SDK(使用者无需关注)

封装该包需要从百度官网下载一个压缩包【audiobd_speech_sdk_asr_v3.0.6_bdasr_20171108_9800a2a_v3.zip】,不同时期名字会有所不同,解压后,找到如下几个文件

  1. 百度语音包:bdasr_V3_20171108_9800a2a.jar;
  2. 五个动态链接库包so文件
  3. 下载地址:点击我 或者 [http://ai.baidu.com/sdk#asr]

语音包提供的供RN使用的接口方法

  1. 开始录音:start();
  2. 结束录音:stop();
  3. 讲话期间监听事件名称:onScanningResult
  4. 取消录音:onDestroy();

##RN项目如何引入该包

  1. 在RN的package.json中添加:“xx-yy-voice”: “git+ssh://xxx.yyy.com:npm/xx-yy-voice.git”
  2. 命令行:$ npm i
  3. 命令行:$ react-native link xx-yy-voice

经过link之后,android/settings.gradle、android/app/build.gradle、android/app/src/main/java/com/[xxx]/MainApplication.java中会自动针对xx-yy-voice进行微妙的配置


##RN项目如何使用该包
1,在百度长语音平台创建一个应用
点击我开始创建,应用APP的我已经创建了。创建好的应用,百度会立马提供APP_ID、API_KEY、SECRET_KEY,然后将这些值配置在RN项目中的AndroidManifest.xml文件中:以本次APP为例,具体配置如下,其他的应用要记得修改上述提到的三个值,因为每个应用的这些值是不同的,在标签下添加如下子标签:

<meta-data android:name="com.baidu.speech.APP_WRONG_ID"
    android:value="xxxyyyzzz---假的" />
<meta-data
    android:name="com.baidu.speech.API_WRONG_KEY"
    android:value="xxxyyyzzz---假的" />
<meta-data
    android:name="com.baidu.speech.SECRET_WRONG_KEY"
    android:value="xxxyyyzzz---假的" />
<service
    android:name="com.baidu.speech.VoiceRecognitionService"
    android:exported="false" />

2,同样在该AndroidManifest.xml文件中赋予该语音应用相关权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

3,引入相关联的包

import { NativeModules, DeviceEventEmitter } from 'react-native

4,在组件加载完成之后对“onScanningResult”事件进行监听

  componentDidMount() {
    DeviceEventEmitter.addListener('onScanningResult', this.XXXYYY.bind(this))
  }
  XXXYYY(e) {
    let result = e.result
    let json = result && result.includes('best_result') ? JSON.parse(result) : null
    if (json) {
	  //业务逻辑,此处自行设计
      console.log('json.best_result ========== ', json.best_result)
    }
  }

5,移除监听

componentWillUnmount() {
	DeviceEventEmitter.removeListener('XXXYYY', this.XXXYYY)
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值