更新记录
1.0.2(2023-11-08)
- 修复iOS个别系统回调问题
1.0.1(2023-11-02)
- ios录音开放更多设置参数
1.0.0(2023-09-13)
- 实时录音
- 可以保存为本地音频mav
- 音频数据pcm实时编码回调,支持G711国标编码、base64编码
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
前言
实时录音,可以保存为本地音频mav,音频数据pcm实时编码回调,支持G711国标编码、base64编码
配置权限
ios:
"NSMicrophoneUsageDescription" : "访问麦克风需要您的授权"
android:
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
支持定制,联系方式 QQ:252797991
var audioRecord = uni.requireNativePlugin("wrs-audioRecord");
设置录音实时pcm音频数据回调
// 设置实时音频数据回调,回调回来的是pcm原生数据
audioRecord.setAudioRecordCallback((resp) => {
// 如果需要将audioData发送给其他设备播放,在iOS端建议缓存1秒再发送,实时发送的话可能音频数据太少无法播放,Android端暂时没有发现这个问题
var audioData = resp.audioData;
this.showMsg(JSON.stringify(resp))
})
- 配置录音参数
每次开始新的录音时都需要配置一次
var params = {}
if (this.isAndroid) {
params = {
audioSource: 1, // 声道来源, 1: MIC 0: DEFAULT
sampleRateInHz: 44100, // 8000 采样率,现在能够保证在所有设备上使用的采样率是44100Hz, 但是其他的采样率(22050, 16000, 11025)在一些设备上也可以使用。
channelConfig: 16, // 声道数,16: CHANNEL_IN_MONO 8: CHANNEL_IN_RIGHT 32: CHANNEL_IN_BACK
audioFormat: 2, // 音频格式,2: ENCODING_PCM_16BIT 3: ENCODING_PCM_8BIT 4: ENCODING_PCM_FLOAT 21: ENCODING_PCM_24BIT_PACKED
needG711: true, // 实时回调的pcm音频数据是否需要G711国标编码后返回,当为true时,实时音频数据会通过setAudioRecordCallback接口回调
needBase64: true, // 实时回调的pcm音频数据是否需要base64
filePath: this.filePath // 有传filePath参数的话,录音会保存到这个文件里
}
} else {
params = {
sampleRateInHz: 8000, // 8000 采样率,现在能够保证在所有设备上使用的采样率是44100Hz, 但是其他的采样率(22050, 16000, 11025)在一些设备上也可以使用。
needG711: true, // 实时回调的pcm音频数据是否需要G711国标编码后返回,当为true时,实时音频数据会通过setAudioRecordCallback接口回调
needBase64: true, //实时回调的pcm音频数据是否需要base64
filePath: this.filePath // 有传filePath参数的话,录音会保存到这个文件里
}
// ios更多参数:
// formatID(如需更多格式,请咨询作者)
// 0: lpcm
// 1:ac3
// 2:60958AC3
// 3:AppleIMA4
// 4: MPEG4AAC
// 10:ULaw
// 11:ALaw
// params.formatID = 0
// formatFlags(如需更多格式,请咨询作者)
// 0x01: kAudioFormatFlagIsFloat
// 0x02: kAudioFormatFlagIsBigEndian
// 0x04: kAudioFormatFlagIsSignedInteger
// 0x08: kAudioFormatFlagIsPacked
// 0x10: kAudioFormatFlagIsAlignedHigh
// 0x20: kAudioFormatFlagIsNonInterleaved
// 0x40: kAudioFormatFlagIsNonMixable
// 0x80000000: kAudioFormatFlagsAreAllClear
// params.formatFlags = 0x04 | 0x08;
// params.framesPerPacket = 1;
// params.channelsPerFrame = 1;
// params.bitsPerChannel = 16;
// params.reserved = 1;
// params.bytesPerFrame = params.bitsPerChannel / 8 * params.channelsPerFrame;
// params.bytesPerPacket = params.bytesPerFrame * params.framesPerPacket;
}
audioRecord.configAudioRecord(params)
- 开始或继续录音
audioRecord.startRecord()
- 暂停录音
audioRecord.pauseRecord()
- 停止录音
存为本地都wav音频文件比较大,如果需要转为mp3这种压缩后都音频文件,可以采用ffmpeg插件https://ext.dcloud.net.cn/plugin?id=12776进行压缩 wav转为mp3的ffmpeg命令为:ffmpeg -i /xxx/xx/audio.m4a /xxx/xx/audio.mp3
audioRecord.stopRecord()
- 激活iOS音频
在iOS端防止边录音,边播放音频时冲突问题,当有冲突时根据各自情况调用activeSession、unActiveSession,没冲突时需要调用(参考demo)
audioRecord.activeSession({});
- 取消iOS音频
audioRecord.unActiveSession();