更新记录

1.0.2(2023-11-08)

  1. 修复iOS个别系统回调问题

1.0.1(2023-11-02)

  1. ios录音开放更多设置参数

1.0.0(2023-09-13)

  1. 实时录音
  2. 可以保存为本地音频mav
  3. 音频数据pcm实时编码回调,支持G711国标编码、base64编码
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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();

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

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\"/>", ios: "NSMicrophoneUsageDescription" : "访问麦克风需要您的授权"

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问