更新记录

1.0.1(2022-11-25)

1.支持Android端的Websocket实时语音识别 2.支持iOS端的Websocket实时语音识别 4.只支持Websocket方式的实时语音识别


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.1 - 10.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 14

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


注意:使用本插件一定要认证阅读说明

插件说明

  • 支持Android端的Websocket实时语音识别
  • 支持iOS端的Websocket实时语音识别
  • 只支持Websocket方式的实时语音识别
  • 拓展对接第三方语音技术厂商的Websocket实时语音识别(在uni-app Speech模块不满足使用时)
  • 使用本插件时需要第三方语音技术厂商提供Websocket服务地址、appid、appkey等
  • 使用本插件详细参考示例项目
  • 使用本插件前,建议先试用没问题再购买

插件准备

  • 以百度语音为例,获取百度语音应用的appid、appkey等
  • 成为开发者,并创建应用获得appid、appkey等,参考https://cloud.baidu.com/doc/SPEECH/s/qknh9i8ed
  • 实时语音识别-websocket API,参考https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj

插件引入

// 引入插件
let speech = uni.requireNativePlugin('YiDian-Speech');

插件使用(这里只展示核心代码,详细参考示例项目)

// baidu:百度智慧云-语音技术-语音识别-websocket
// zhihui:智慧家庭运营中心->语音识别能力-websocket
apiChannel: 'baidu',

// 这里以百度语音为例
// 百度语音识别的参数,参考“插件准备”去申请百度语音应用的appid、appkey等
// 语音识别websockey地址
baiduUrl: 'ws://vop.baidu.com/realtime_asr',
// 语音识别的appId
baiduAppId: 2725****,
// 语音识别的appKey
baiduAppKey: 'Fb2DdyMXpe5c5ifTkP16****',

// 音频编码:pcm
format: 'pcm',
// 采样率:16000
sampleRate: 16000,
// websocket服务地址
url: '',
// 数据帧大小
frameSize: 5120,
// 开始帧鉴权json数据
startJson: '',
// 结束帧标记json数据
finishJson: '',

// 根据不同语音厂商初始化api
initApi() {
    // 不同语音识别厂商的Api不同,百度语音的实时语音识别-websocket API,参考https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
    if(this.apiChannel == 'baidu') {
        // 百度实时语音识别-websocket的文档:   https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
        this.url = this.baiduUrl+'?sn='+uuid(true);
        let startObj = {
            type: 'START',
            data: {
                appid: this.baiduAppId,
                appkey: this.baiduAppKey,
                dev_pid: 15372,
                cuid: 'cuid_test1',
                format: this.format,
                sample: this.sampleRate
            }
        }
        let finishObj = {
            type: 'FINISH'
        }
        this.startJson = JSON.stringify(startObj);
        this.finishJson = JSON.stringify(finishObj);
    }
},

// 开始语音识别。不同语音识别厂商的Api不同,百度语音的实时语音识别-websocket API,参考https://cloud.baidu.com/doc/SPEECH/s/2k5dllqxj
start() {
    this.initApi();
    this.starting = true;

    this.text = '';
    this.tempText = '';
    this.task = 0;
    this.taskMsg = '';
    this.volume = 0;
    speech.start(
        {
            // websocket服务地址
            url: this.url,
            // 数据帧大小
            frameSize: this.frameSize,
            // 开始帧鉴权数据
            startJson: this.startJson,
            // 结束帧数据
            finishJson: this.finishJson
        },
        // 调用结果
        (res) => {
            /**
             * code
             * -1 麦克风权限被拒或options参数错
             * 0 语音识别连接开始
             * 1 语音识别连接成功
             * 2 语音识别连接失败
             * 3 语音识别连接关闭
             * 4 语音识别连接异常或网络异常
             */
            if(res.code == '0') {
                this.task = res.task;
            }
            if(this.task == res.task) {
                this.taskMsg = res.msg;
            }
        },
        // 识别结果回调
        (res) => {
            if(this.task == res.task) {
                if(this.apiChannel == 'baidu') {
                    let data = JSON.parse(res.text || '{}');
                    // 一句话的临时识别结果示例:
                    if(data.err_msg == 'OK' && data.type == 'MID_TEXT') {
                        this.tempText = data.result || '';
                    }
                    // 一句话的最终识别结果:
                    else if(data.err_msg == 'OK' && data.type == 'FIN_TEXT') {
                        this.text += data.result;
                        this.tempText = '';
                    }
                }
                else if(this.apiChannel == 'zhihui') {
                    let datd = JSON.parse(res.text || '{}');
                    let data = datd.data || {};
                    if(datd.resultCode == 200 && data.varText) {
                        this.tempText = data.varText || '';
                    }
                    else if(datd.resultCode == 200 && data.text) {
                        this.text += data.text;
                        this.tempText = '';
                    }
                }
            }
        },
        // 音量结果回调
        (res) => {
            if(this.task == res.task) {
                this.volume = res.volume;
            }
        }
    );
},
// 结束语音识别
stop() {
    this.starting = false;
    speech.stop((res) => {
    });
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

麦克风权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问