UNIAPP调用讯飞语音评测API

这篇具有很好参考价值的文章主要介绍了UNIAPP调用讯飞语音评测API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、历经千辛万苦,UNIAPP调用评测API终于完成,在此做下总结下:首先看效果!

UNIAPP调用讯飞语音评测API,uni-app,语音识别

2、实现第1步,首先是鉴权,用到的CryptoJS等工具都可以从讯飞和uniapp官方获取
import * as base64 from "base-64"
import CryptoJS from '../../static/crypto-js/crypto-js.js'
import parser from '../../static/fast-xml-parser/src/parser'
import * as utf8 from "utf8"

getWebSocketUrl() {
                return new Promise((resolve, reject) => {
                    // 请求地址根据语种不同变化
                    var url = "wss://ise-api.xfyun.cn/v2/open-ise";
                    var host = "ise-api.xfyun.cn";
                    var apiKeyName = "api_key";
                    var date = new Date().toGMTString();
                    var algorithm = "hmac-sha256";
                    var headers = "host date request-line";
                    var signatureOrigin = `host: ${host}\ndate: ${date}\nGET /v2/open-ise HTTP/1.1`;
                    var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, this.APISecret);
                    var signature = CryptoJS.enc.Base64.stringify(signatureSha);
                    var authorizationOrigin =
                        `${apiKeyName}="${this.APIKey}", algorithm="${algorithm}", headers="${headers}", signature="${signature}"`;
                    var authorization = base64.encode(authorizationOrigin);
                    url = `${url}?authorization=${authorization}&date=${date}&host=${host}`;

                    // console.log(url)
                    resolve(url); // 主要是返回地址
                });
            },
3、实现第2不,构建websocket连接
data() {
            return {
                socketTask: {}, // 全局ws任务
                audioDataList: [], // 临时录音存储集合
                APPID: '',
                APISecret: '',
                APIKey: '',
                ent: 'cn_vip',
                category: 'read_sentence',
                TEXT: '\uFEFF' + '今天天气怎么样',
                wsLiveFlag: false,
                iseResult: '',
                iseFinalResult: '',
                speakMark: '开始评测录音',
                buttonGroup: [{
                    text: '开始评测录音',
                    backgroundColor: 'green',
                    color: '#fff'
                }, {
                    text: '停止评测录音',
                    backgroundColor: '#ffa200',
                    color: '#fff'
                }],
            };
        },

 -------------------------------------------------

async bulidSocketConnect() {
                let myUrl = await this.getWebSocketUrl();
                // myUrl = 'wss://wdfgdzx.top/ws_server/zs'
                // console.log(encodeURI(encodeURI(myUrl).replace(/\+/g, '%2B')))
                let realThis = this;
                this.socketTask = uni.connectSocket({
                    //url: encodeURI(encodeURI(myUrl).replace(/\+/g, '%2B')),
                    url: myUrl,
                    method: 'GET',
                    success: res => {
                        console.log(res, "ws成功连接...", myUrl)
                        realThis.wsLiveFlag = true;
                    }
                })
                realThis.socketTask.onError((res) => {
                    console.log("连接发生错误", res)
                })
                realThis.socketTask.onOpen((res) => {
                    console.info("wss的onOpen成功执行...", res)
                    // 第一帧..........................................
                    console.log('open成功...')
                    let params = {
                        common: {
                            app_id: realThis.APPID
                        },
                        business: {
                            category: realThis.category,
                            ent: realThis.ent, // 中文
                            rstcd: "utf8",
                            sub: 'ise',
                            tte: 'utf-8',
                            cmd: "ssb",
                            auf: 'audio/L16;rate=16000',
                            aue: 'raw',
                            text: realThis.TEXT,
                        },
                        data: {
                            status: 0,
                            data: "",
                            // data: uni.arrayBufferToBase64(audioData[0]),
                        },
                    };
                    console.log("发送第一帧...", params)
                    realThis.socketTask.send({ // 发送消息,,都用uni的官方版本
                        data: JSON.stringify(params),
                        success() {
                            console.log('第一帧发送成功')
                        }
                    });
                });

                // 接受到消息时
                realThis.socketTask.onMessage((res) => {
                    console.log('收到API返回的内容:', res.data);
                    realThis.iseResult = res.data;
                    let temp = JSON.parse(res.data)
                    // console.log(temp)
                    if (temp.code !== 0) {
                        console.log(`${temp.code}:${temp.message}`);
                        realThis.socketTask.close({
                            success(res) {
                                console.log('关闭成功', res)
                                realThis.wsLiveFlag = false;
                            },
                            fail(err) {
                                console.log('关闭失败', err)
                            }
                        })
                    }
                    if (temp.code === 0) {
                        if (res.data && temp.data.status === 2) {
                            const data = base64.decode(temp.data.data);
                            let decodeStr = utf8.decode(data);
                            console.log(temp)
                            console.log(decodeStr) // 打印完毕评测结果再关闭
                            realThis.iseFinalResult = decodeStr;
                            setTimeout(() => {
                                realThis.socketTask.close({
                                    success(res) {
                                        console.log('关闭成功', res)
                                    },
                                    fail(err) {
                                        console.log('关闭失败', err)
                                    }
                                })
                            }, 2000)
                        }
                    }
                })

            },
4、实现步骤3,不断的通过uniapp实时录音,发送音频给服务端API,点击结束录音发送最后一帧音频
buttonClick(e) { // 点击评测按钮
                if (e.content.text === "开始评测录音") {
                    this.speakMark = '正在评测,语音输入中...'
                    const realThis = this;
                    // 开始录音,初始化一些东西
                    const option = {
                        duration: 600000, // 录音的时长,单位 ms,最大值 600000(10 分钟)
                        sampleRate: 16000, // 采样率(pc不支持)
                        numberOfChannels: 1, // 录音通道数
                        // encodeBitRate: 48000, // 编码码率(默认就是48000)
                        frameSize: 1, // 指定帧大小,单位 KB。传入 frameSize 后,每录制指定帧大小的内容后,会回调录制的文件内容,不指定则不会回调。暂仅支持 mp3、pcm 格式。
                        format: "pcm", // 音频格式,默认是 aac
                    }
                    recorderManager.onStart(() => {
                        console.log("recorder start");
                    });
                    recorderManager.onFrameRecorded((res) => {
                        // frameBuffer    ArrayBuffer    录音分片结果数据。  isLastFrame    Boolean    当前帧是否正常录音结束前的最后一帧
                        const {
                            frameBuffer
                        } = res;
                        // console.log(frameBuffer) 这里把音频放到临时的集合中,方便保存为文件
                        if (frameBuffer) {
                            realThis.audioDataList.push(frameBuffer);
                            // 2、判断连接了,发送中间帧..........................................
                            if (realThis.wsLiveFlag) {
                                const params = {
                                    business: {
                                        cmd: "auw",
                                        aus: 2,
                                        aue: "raw"
                                    },
                                    data: {
                                        status: 1,
                                        encoding: "raw",
                                        data_type: 1,
                                        data: uni.arrayBufferToBase64(frameBuffer),
                                    },
                                };
                                console.log("发送中间帧", params, realThis.wsLiveFlag)
                                realThis.socketTask.send({
                                    data: JSON.stringify(params),
                                    success() {
                                        console.log('中间帧发送成功')
                                    },
                                    fail(res) {
                                        console.log('中间帧发送失败...', res)
                                    }
                                });
                            }
                        }
                    });
                    recorderManager.start(option); // 开始录音时,建立ws连接
                    this.bulidSocketConnect();
                    //setTimeout(this.bulidSocketConnect, 2000) //  main延迟2秒入口建立ws连接
                }
                if (e.content.text === "停止评测录音") {
                    this.speakMark = '开始评测录音'
                    // 3、发送最后一帧..........................................
                    const params = {
                        "business": {
                            "cmd": "auw",
                            "aus": 4,
                            "aue": "raw"
                        },
                        "data": {
                            "status": 2,
                            "encoding": "raw",
                            "data_type": 1,
                            "data": "",
                        }
                    };
                    this.socketTask.send({
                        data: JSON.stringify(params),
                        success(res) {
                            console.log('最后一帧发送成功...', res)
                        },
                        fail(res) {
                            console.log('最后一帧发送失败...', res)
                        }
                    });
                    console.log("发送最后一帧", params)
                    console.log('录音结束');
                    recorderManager.stop();
                }
            },

5、直接可运行的DMEO可以文章来源地址https://www.toymoban.com/news/detail-544344.html

到了这里,关于UNIAPP调用讯飞语音评测API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用讯飞语音转写API进行音频转文字

    参考官方文档:语音转写、语音转写API文档 在运行代码之前需要前往讯飞开放平台注册登录,并完成实名认证,可领取免费试用时间。 并且需要创建应用,完成应用的创建后,前去语音转写页面获取APPID和SecretKey填入代码中的appid和secret_key参数 upload_file_path参数上传的文件格

    2024年02月17日
    浏览(28)
  • uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)

        语音播报的实现的方法有很多种,我这里介绍集中不引用百度、阿里或者迅飞的API的实现方式。 一、采用new SpeechSynthesisUtterance的方式 废话不多说直接上代码 方法的结束事件 二、采用speak-tts插件的方式 1、安装speak-tts 2.使用 三、微信小程序可以采用微信提供的插件 1、添

    2024年02月16日
    浏览(39)
  • uni-app语音转文字功能demo(同声传译)

    目录 首先去微信开发者官网申请一下同声传译的插件  微信公众平台 在文件中开始引用: 首先去微信开发者官网申请一下 同声传译 的插件   微信公众平台 后续使用的时候可以看详情里面的信息进行使用 在文件中开始引用: 注意!!在这个源码视图中开始引入插件!!

    2024年02月09日
    浏览(36)
  • 【人工智能】科大讯飞API接口调用(第一集)

    这学期有一门人工智能教育课程,恰巧又有这么一个实践,要求进行人工智能接口调用 于是首选了科大讯飞,下面是详细过程记录 以下是流程以及实现细节描述 第一步 来到科大讯飞开放平台 http://www.xfyun.cn 第二步 注册一个账号 注册时响应可能没那么快,稍等即可 第三步

    2024年02月09日
    浏览(31)
  • Python调用讯飞星火大模型v3 api接口使用教程

            这里我们可以获取星火免费赠送的200万个token使用和测试,获取方法如下:         打卡网站讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 ,登录用户点击免费使用                 点击购买首次应该会让创建一个应用, 如下图,按要求内容随意填写

    2024年02月05日
    浏览(36)
  • uni-app语音转文字功能demo(小程序同声翻译开箱即用)

    目录 一、同声翻译插件的申请 二、uni-app中的引用 小程序开发者官网:微信公众平台          点击小程序管理后台后,再次点击设置,选中第三方服务  搜索同声传译,将插件添加至自己的小程序服务中  点击详情可看到官方文档及AppId(后续使用中会用到) 新建项目后,

    2024年03月20日
    浏览(34)
  • 免费200万Tokens 用科大讯飞API调用星火大模型服务

    简介 自ChatGPT火了之后,国内的大模型发展如雨后春笋。其中的佼佼者之一就是科大讯飞研发的星火大模型,现在大模型已经更新到V3nbsp;版本,而且对开发者也是相当友好, 注册就送200万tokens ,讯飞1tokensnbsp;约等于nbsp;1.5nbsp;个中文汉字 或者nbsp;0.8nbsp;个英文单词。所以200万to

    2024年01月20日
    浏览(46)
  • 【UniApp】-uni-app-网络请求

    经过上个章节的介绍,大家可以了解到 uni-app-pinia存储数据的基本使用方法 那本章节来给大家介绍一下 uni-app-网络请求 的基本使用方法 首先我们打开官方文档,我先带着大家看一下官方文档的介绍:https://uniapp.dcloud.net.cn/api/request/request.html 从官方文档中我们可以看到,可以

    2024年02月04日
    浏览(34)
  • uni-app 之 uni.request 网络请求API接口

    uni-app 之 uni.request 网络请求API接口 image.png

    2024年02月09日
    浏览(36)
  • 【UniApp】-uni-app-打包成网页

    经过上一篇文章的介绍,已经将这个计算器的计算功能实现了,接下来就是我们项目当中的一个发包上线阶段,我模拟一下,目的就是为了给大家介绍一下,uni-app是如何打包成网页的。 除了可以打包成网页,uni-app还可以打包成小程序、App、H5、快应用等等,后面在单独开文

    2024年02月04日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包