更新记录
1.4.0(2023-07-14)
修复上个包上传错误导致的bug
1.30(2023-07-11)
修复ios,start触发异常
1.20(2023-07-10)
修复ios 8000采样率传输不正确
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:6.0 - 14.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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原生插件配置”->”云端插件“列表中删除该插件重新选择
导入资源:
// 引入录音对象
/* #ifdef APP-PLUS */
import Record from './record.js';
/* #endif */
// 录音权限申请
const { authForApp } = require('../utils/appPermission');
// 腾讯云asr识别对象
import TengxunAsr from './TengxunAsr.js';
// 阿里云 asr识别
import AliyunAsr from './AliyunAsr.js';
// 科大讯飞 asr识别
import XunfeiAsr from './XunfeiAsr.js';
let recorderManager = null;
let asr = null;
let innerAudioContext = null;
asr初始化
asrInit() {
// 初始阿里云asr,输入必要的参数
// asr = new AliyunAsr({
// accessKeyId: '',
// accessKeySecret: '',
// appkey: ''
// params: {}
// });
// 初始科大讯飞asr,输入必要的参数
// asr = new XunfeiAsr({
// appid: '',
// appkey: '',
// params: {}
// });
// 初始化腾讯云asr,输入必要的参数,输入secretKey和secretId直接跑demo
asr = new TengxunAsr({
secretKey: '',
secretId: '',
appId: '1323065199',
params: {}
});
// asr,有open和close两个主要方法
asr.init({
onOpen: res => {},
onMessage: res => {
console.log('第三方的asr返回的数据:', res);
// 科大讯飞返回结果处理,不需要删除
if (asr.type === 'xunfei') {
}
// 阿里云返回结果处理,不需要删除
if (asr.type === 'ali') {
if (res.header.name === 'TranscriptionResultChanged') {
console.log('%c Line:92 🍓 TranscriptionResultChanged=============', res.payload.result);
this.addContent = res.payload.result;
} else if (res.header.name === 'TranscriptionStarted') {
// 'frameSize':kb
// 'sampleRate':int,//采样率(16000采样率插件写死16000)8000采样率插件的要写死8000
// 'duration':number // 默认录音时间
// 生成的录音格式一律是pcm,这种格式基本兼容所有市场的asr第三方
// app端录音需要这是四个参数,其他参数内置好了默认值。不建议修改,因为这种配置比较稳定
// 微信小程序端可以根据微信小程序文档自行写入参
recorderManager.start({
frameSize: 5,
duration: 30 * 60 * 1000,
sampleRate: 16000,
format: 'pcm'
});
} else if (res.header.name === 'SentenceEnd') {
console.log('%c Line:94 🥓 SentenceEnd====================', res.payload.result);
this.content = this.content + res.payload.result;
this.addContent = '';
}
}
// 不同第三方的asr返回的文字数据的字段不一样,腾讯云是voice_text_str,阿里云可能是其他,自己根据对应文档去写 腾讯云asr返回结果的,不需要删除
if (asr.type === 'tengxun') {
const { voice_text_str = '' } = res.result || {};
this.addContent = voice_text_str;
}
},
onClose: res => {}
});
},
开始录音
async start() {
// 修改自定义入参
asr?.changeParams(this.asrParams);
// 开始录音前链接asr,超过15秒没发音频数据会自动断开
await asr?.open();
// 等一点初始化时间,可以在这个业务逻辑上添加ui 的loading
await new Promise(resolve => setTimeout(resolve, 200));
// 没有asr或者asr是腾讯/讯飞的时候走这个
if (asr?.type === 'tengxun' || asr?.type === 'xunfei' || !asr) {
// 'frameSize':kb
// 'sampleRate':int,//采样率(16000采样率稳定,能兼容所有,不能改)
// 'duration':number // 默认录音时间
// 生成的录音格式一律是pcm,这种格式基本兼容所有市场的asr第三方
// app端录音需要这是四个参数,其他参数内置好了默认值。不建议修改,因为这种配置比较稳定
// 微信小程序端可以根据微信小程序文档自行写入参
recorderManager.start({
frameSize: 2,
duration: 30 * 60 * 1000,
sampleRate: 16000,
format: 'PCM',
// 是否需要生成录音临时地址。不需要最好为false,减轻开销
createPath: true
});
}
},