更新记录
1.5.0(2024-09-09)
修复了 苹果15 录制wav,闪退的问题
1.4.0(2023-07-21)
本次主要更新: 1.andorid修复实时回调 framebase64返回不正确 和 pcm文件大小为0的情况
1.3.0(2023-06-29)
本次主要更新: 1.修复andorid13 start方法配置isService为true,闪退的bug 2.ios修复 format 不生效的问题 3.ios resume方法增加 音频恢复
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 14.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | 适用版本区间:11 - 17 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
KJ-AudioV2
录音支持实时帧pcm回调、暂停、继续、后台录音、息屏录音、长时间录音
注意
1.andorid需要配置:manifest.json -> app-plus -> distribute -> android -> targetSdkVersion
targetSdkVersion 要设置 >= 23
2.andorid 自定义通知的图标和小图标,不设置的话,默认是插件里的默认图标
需要在 主目录->nativeplugins->KJ-AudioV2->android->res->drawable 下配置添加 kj_audio_v2_push_small.png(小图标) 和 kj_audio_v2_push.png(图标)
详情下载参考示例项目
小图标设计要求是特殊的, 特别需要注意以下两点:
a.必须是透明的底;
b.内部形状颜色为白色最佳; (是其他颜色也可以, 但好像最终也会转成,通知栏显示白色, 通知左上角图标灰色)
andorid push_small小图标注意事项:https://ask.dcloud.net.cn/article/39429
后台录音 不保证所有手机有效
ios:
manifest.json->App常用其它设置->后台运行能力 填入“audio” 然后运打包
andorid:
KJAudio.start 的isService参数设置为true
使用
<template>
<view class="content">
<button type="primary" @click="start">开始录音</button>
<view class="json">{{onStartJson}}</view>
<button type="primary" @click="pause">暂停</button>
<button type="primary" @click="resume">恢复</button>
<button type="primary" @click="stop">停止</button>
<view class="json">实时帧:{{onFrameRecordedJson}}</view>
</view>
</template>
<script>
var KJAudioV2 = uni.requireNativePlugin("KJ-AudioV2");
export default {
data() {
return {
onStartJson: "",
onFrameRecordedJson: ""
}
},
onLoad() {
var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('onFrameRecorded', (res) => {
console.log('onFrameRecorded:');
this.onFrameRecordedJson = JSON.stringify(res);
});
globalEvent.addEventListener('onStart', (res) => {
console.log('onStart:' + JSON.stringify(res));
this.onStartJson = JSON.stringify(res);
});
globalEvent.addEventListener('onPause', (res) => {
console.log('onPause:' + JSON.stringify(res));
if (res.type == "systemPause") { //ios 通话的时候,系统会自动暂停,andorid,不受影响,只是不能录制,电话挂了之后,会继续录音
console.log("系统暂停");
}
});
},
methods: {
start() {
var dic = {
"filePath": plus.io.convertLocalFileSystemURL("_doc/KJ-AudioV2"),
"format": "wav", //最终音频格式,有效值 wav/pcm
"sampleRate": 8000, //采样率,有效值 8000/16000/44100
"numberOfChannels": 2,
"isService": true, //android才支持,是否开启后台服务,在后台和熄屏都可以录音
"notificationID": "KJ-Audio10", //android8才支持,通知ID
"notificationName": "主服务", //android8才支持,通知名
"notificationTitle": "录音服务", //android才支持,通知标题
"notificationText": "运行中...", //android才支持,通知内容
"isSetNotificationVibrate": false, //android才支持,是否设置震动,由于android机制,通知设置过了,就不能再修改,如果要修改,要先修改notificationID
"isRequestPermissions": true, //android才支持,是否申请RECORD_AUDIO权限
/**以下是指定帧参数,格式pcm**/
"frameFilePath": plus.io.convertLocalFileSystemURL("_doc/KJ-AudioV2-frame"), //指定帧保存pcm文件的路径
"isFrameBase64": true, //是否返回指定帧的base64
"frameSize": 10, //KB 指定帧大小,单位 KB,只能设置10以下
};
KJAudioV2.start(dic, (res) => {
console.log("start:" + JSON.stringify(res))
})
},
pause() {
KJAudioV2.pause((res) => {
console.log("pause:" + JSON.stringify(res))
})
},
resume() {
KJAudioV2.resume((res) => {
console.log("resume:" + JSON.stringify(res))
})
},
stop() {
KJAudioV2.stop((res) => {
console.log("stop:" + JSON.stringify(res))
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = res.filePath;
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
})
}
}
}
</script>
<style>
.json {
word-wrap: break-word;
}
</style>