更新记录
1.0.1(2025-01-11) 下载此版本
更新使用方式文档,修复web使用的bug
1.0.0(2025-01-10) 下载此版本
开发腾讯语音识别
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.1.0 app-vue | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
11 | 53 | × | × | 53 | × | 79 | 68 | 11 |
yue-asr-tx
功能介绍
腾讯的流式语音识别,支持android和web的流式输出,解决app上录音不支持分片的功能
基础配置
请将模块下static目录的资源放到项目的static目录下面
//内部语音对象创建
this.recorder = new RecorderManager(path + 'static/dist')
请放置路径正确
1.权限问题
当前项目打包在app上面,需要配置系统权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
对于android应用,基于安全权限,请在调用时动态申请危险权限
// #ifdef APP
plus.android.requestPermissions(["android.permission.RECORD_AUDIO"], (e) => {}, (e) => {})
// #endif
2.支持问题
1.在uniapp 在app上不支持录音分片(截止到2025-01-01)为了解决这个问题,底层使用了renderjs
使用了web相关的技术。
2.内置录音采用 MediaDevices接口,不兼容ie浏览器、夸克浏览器和uc浏览器,其他浏览器兼容性具体文档可参考 https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices
3.浏览器测试时,请改为移动端模式。
使用demo
<template>
<view class="content">
<view placeholder="转文字" class="inputarea">
{{msg}}
</view>
<view class="down-ui" v-if="downed" :style="{backgroundColor:downtime==-1?'#e43d33':'#1acf3b'}">
<!-- 效果显示 -->
<view v-if="downtime==-1">
建立连接中
</view>
<view v-else>
语音倒计时
<text style="color: red;">{{downtime}} </text>
</view>
</view>
<button class="btn-bottom" :disabled="disabled" @touchstart.stop="start" @touchend.stop="end">按下说话</button>
<yue-asr-tx ref="yueAsrRefs" :options="optionstx" @countDown="countDown" @result="resultMsg" @onStop="onStop"
@onOpen="onOpen" @change="change"></yue-asr-tx>
</view>
</template>
<script>
export default {
data() {
let second = 60;
return {
title: 'Hello',
msg: '转文字',
optionstx: {
receordingDuration: second,
APPID: '',
API_SECRET: '',
API_KEY: ''
},
downtime: -1, //默认-1
downed: false,
disabled: false,
};
},
onLoad() {
// #ifdef APP
plus.android.requestPermissions(["android.permission.RECORD_AUDIO"], (e) => {}, (e) => {})
// #endif
},
methods: {
resumeUi() {
this.downed = false;
this.downtime = -1;
this.disabled = false;
},
start() {
if (this.disabled) {
return;
}
console.log("开始")
this.downed = true;
this.$refs.yueAsrRefs.start();
this.disabled = true;
//建立连接
},
end() {
console.log("结束")
this.$refs.yueAsrRefs.end();
},
countDown(e) {
console.log('countDown', e);
this.downtime = e;
},
onStop(e) {
console.log('onStop', e);
this.resumeUi();
},
onOpen(e) {
console.log('onOpen', e);
},
change(e) {
console.log('change', e);
},
resultMsg(e) {
this.msg = e
console.log('resultMsg', e);
}
}
};
</script>
<style>
.btn-bottom {
width: 100vw;
position: absolute;
bottom: 0px;
}
.inputarea {
text-align: left;
color: red;
height: 200rpx;
border: 1px solid #ccc;
margin: 10rpx;
border-radius: 10rpx;
padding: 5rpx;
overflow-y: scroll;
}
.down-ui {
height: 100px;
width: 100%;
position: absolute;
bottom: 50px;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
</style>