更新记录

1.0.0(2025-10-16)

init: 初始化


平台兼容性

lwj-RecorderManager

基于 Kotlin 实现的录音管理器 UTS 插件,完全兼容 uni.getRecorderManager() API。

功能特性

  • ✅ 支持录音开始、暂停、恢复、停止
  • ✅ 支持多种音频格式:aac、mp3、wav、PCM
  • ✅ 支持自定义采样率、声道数、码率
  • ✅ 支持实时分贝检测
  • ✅ 支持录音帧数据回调(用于实时处理)
  • ✅ 支持录音时长限制
  • ✅ 完整的错误处理和状态管理
  • ✅ 基于 Android AudioRecord 实现

平台支持

  • ✅ Android (基于 Kotlin)
  • ❌ iOS (暂不支持)
  • ❌ H5 (暂不支持)
  • ❌ 小程序 (暂不支持)

安装使用

1. 导入插件

将插件复制到项目的 uni_modules 目录下。

2. 在页面中使用

import { getRecorderManager } from '@/uni_modules/lwj-RecorderManager'

export default {
  data() {
    return {
      recorderManager: null as any,
      isRecording: false,
      recordingPath: ''
    }
  },

  onLoad() {
    // 获取录音管理器实例
    this.recorderManager = getRecorderManager()

    // 监听录音开始事件
    this.recorderManager.onStart(() => {
      console.log('录音开始')
      this.isRecording = true
    })

    // 监听录音暂停事件
    this.recorderManager.onPause(() => {
      console.log('录音暂停')
    })

    // 监听录音恢复事件
    this.recorderManager.onResume(() => {
      console.log('录音恢复')
    })

    // 监听录音停止事件
    this.recorderManager.onStop((res) => {
      console.log('录音停止', res)
      this.isRecording = false
      // 优先使用相对路径,如果不可用则使用绝对路径
      this.recordingPath = res.relativePath || res.tempFilePath
      console.log('录音文件路径:', this.recordingPath)
      console.log('录音时长:', res.duration, '秒')
      console.log('文件大小:', res.fileSize, '字节')
    })

    // 监听录音帧数据事件
    this.recorderManager.onFrameRecorded((res) => {
      console.log('录音帧数据:', res.frameBuffer)
      console.log('是否最后一帧:', res.isLastFrame)
    })

    // 监听录音错误事件
    this.recorderManager.onError((err) => {
      console.error('录音错误:', err.errMsg)
      this.isRecording = false
    })

    // 监听分贝变化事件
    this.recorderManager.onDecibelChange((res) => {
      console.log('当前分贝:', res.decibel)
    })
  },

  methods: {
    // 开始录音
    startRecord() {
      this.recorderManager.start({
        duration: 60000,        // 录音时长,单位 ms,最大值 600000(10 分钟)
        sampleRate: 16000,      // 采样率,有效值 8000/16000/44100/48000
        numberOfChannels: 1,    // 录音通道数,有效值 1/2
        encodeBitRate: 48000,   // 编码码率
        format: 'wav',          // 音频格式,有效值 aac/mp3/wav/PCM(推荐使用 wav)
        frameSize: 1,           // 指定帧大小,单位 KB
        detectDecibel: true     // 检测声音分贝数
      })
    },

    // 暂停录音
    pauseRecord() {
      this.recorderManager.pause()
    },

    // 恢复录音
    resumeRecord() {
      this.recorderManager.resume()
    },

    // 停止录音
    stopRecord() {
      this.recorderManager.stop()
    },

    // 清理临时文件
    cleanupTempFiles() {
      this.recorderManager.cleanupExpiredFiles()
      console.log('临时文件清理完成')
    }
  }
}

API 文档

getRecorderManager()

获取全局唯一的录音管理器实例。

返回值:

  • RecorderManagerInterface - 录音管理器实例

RecorderManagerInterface

start(options?)

开始录音。

参数:

  • options (可选) - 录音选项
    • duration (number) - 录音时长,单位 ms,最大值 600000(10 分钟)
    • sampleRate (number) - 采样率,有效值 8000/16000/44100/48000
    • numberOfChannels (number) - 录音通道数,有效值 1/2
    • encodeBitRate (number) - 编码码率
    • format (string) - 音频格式,有效值 aac/mp3/wav/PCM
    • frameSize (number) - 指定帧大小,单位 KB
    • hideTips (boolean) - 隐藏录音图标
    • audioSource (string) - 指定录音的音频输入源
    • detectDecibel (boolean) - 检测声音分贝数

pause()

暂停录音。

resume()

继续录音。

stop()

停止录音。

onStart(callback)

监听录音开始事件。

参数:

  • callback (function) - 回调函数

onPause(callback)

监听录音暂停事件。

参数:

  • callback (function) - 回调函数

onResume(callback)

监听录音恢复事件。

参数:

  • callback (function) - 回调函数

onStop(callback)

监听录音停止事件。

参数:

  • callback (function) - 回调函数,参数为 RecorderStopResult
    • tempFilePath (string) - 录音文件的临时路径(绝对路径)
    • relativePath (string) - 录音文件的相对路径(UniApp 标准格式)
    • duration (number) - 录音总时长,单位 s
    • fileSize (number) - 录音文件大小,单位 Byte

onFrameRecorded(callback)

监听录音帧数据事件。

参数:

  • callback (function) - 回调函数,参数为 RecorderFrameResult
    • frameBuffer (ArrayBuffer) - 录音分片结果数据
    • isLastFrame (boolean) - 当前帧是否正常录音结束前的最后一帧

onError(callback)

监听录音错误事件。

参数:

  • callback (function) - 回调函数,参数为 RecorderError
    • errMsg (string) - 错误信息

onDecibelChange(callback)

监听分贝变化事件。

参数:

  • callback (function) - 回调函数,参数为 DecibelChangeResult
    • decibel (number) - 当前分贝值

offStart(callback?)

取消监听录音开始事件。

offPause(callback?)

取消监听录音暂停事件。

offResume(callback?)

取消监听录音恢复事件。

offStop(callback?)

取消监听录音停止事件。

offFrameRecorded(callback?)

取消监听录音帧数据事件。

offError(callback?)

取消监听录音错误事件。

offDecibelChange(callback?)

取消监听分贝变化事件。

cleanupExpiredFiles()

清理过期的临时录音文件。建议定期调用此方法以释放存储空间。

权限配置

manifest.json 中配置录音权限:

{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
          "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
          "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>"
        ]
      }
    }
  }
}

注意事项

  1. 权限要求:使用前需要确保应用已获得录音权限
  2. 文件格式:录音文件保存在应用沙盒目录,符合 Android10+ 分区存储要求
  3. 路径处理:建议优先使用 relativePath
  4. 性能优化:建议在不需要时及时停止录音以释放资源
  5. 错误处理:务必监听 onError 事件以处理录音过程中的错误
  6. 帧数据onFrameRecorded 回调在指定 frameSize 时对所有格式都触发
  7. 临时文件:建议定期调用 cleanupExpiredFiles() 清理临时文件
  8. Android10+ 兼容:插件已适配 Android10+ 分区存储机制

技术实现

  • 底层实现:基于 Android AudioRecord API
  • 音频处理:支持 PCM 16位音频录制
  • 文件格式:支持多种音频格式输出
  • 实时处理:支持实时分贝检测和帧数据回调
  • 线程安全:使用原子操作确保线程安全

隐私、权限声明

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

"android.permission.RECORD_AUDIO", "android.permission.MODIFY_AUDIO_SETTINGS", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE"

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

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

暂无用户评论。