更新记录
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/48000numberOfChannels
(number) - 录音通道数,有效值 1/2encodeBitRate
(number) - 编码码率format
(string) - 音频格式,有效值 aac/mp3/wav/PCMframeSize
(number) - 指定帧大小,单位 KBhideTips
(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) - 录音总时长,单位 sfileSize
(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\"/>"
]
}
}
}
}
注意事项
- 权限要求:使用前需要确保应用已获得录音权限
- 文件格式:录音文件保存在应用沙盒目录,符合 Android10+ 分区存储要求
- 路径处理:建议优先使用
relativePath
- 性能优化:建议在不需要时及时停止录音以释放资源
- 错误处理:务必监听
onError
事件以处理录音过程中的错误 - 帧数据:
onFrameRecorded
回调在指定frameSize
时对所有格式都触发 - 临时文件:建议定期调用
cleanupExpiredFiles()
清理临时文件 - Android10+ 兼容:插件已适配 Android10+ 分区存储机制
技术实现
- 底层实现:基于 Android
AudioRecord
API - 音频处理:支持 PCM 16位音频录制
- 文件格式:支持多种音频格式输出
- 实时处理:支持实时分贝检测和帧数据回调
- 线程安全:使用原子操作确保线程安全