更新记录

0.2.2(2026-01-24)

  • fix: 修复鸿蒙因增加的disableFileOutput问题

0.2.1(2026-01-24)

  • fix: 增加disableFileOutput禁止生成文件

0.2.0(2026-01-23)

  • fix: 去掉安卓存储权限
查看更多

平台兼容性

uni-app(4.34)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
5.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - -

uni-app x(4.61)

Chrome Safari Android iOS 鸿蒙 微信小程序
5.0

lime-recorder

基于 getRecorderManager API 实现的跨平台录音插件,兼容 iOS、Android、HarmonyOS、Web 和小程序平台。

文档

安装

  1. 在 HBuilderX 中导入插件
  2. 在需要使用的页面或组件中导入 getRecorderManager 方法

基础使用

模板部分

<template>
  <view>
    <button @click="startRecord">开始录音</button>
    <button @click="endRecord">录音结束</button>
    <button @click="playVoice">播放</button>
    <button @click="stopVoice">暂停播放</button>
  </view>
</template>

脚本部分

// Vue 3 Composition API
import { getRecorderManager, type LimeRecorderManagerStartOption } from '@/uni_modules/lime-recorder'
const recorderManager = getRecorderManager();
const player = uni.createInnerAudioContext()

recorderManager.onStop((res)=> {
    console.log('recorder stop', res);
    player.src = res.tempFilePath;
});

const startRecord = ()=> {
    console.log('开始录音');
    recorderManager.start({
        frameSize: 1,
        sampleRate: 16000,
        numberOfChannels: 1,
        format: 'wav',
        encodeBitRate: 48000
    } as LimeRecorderManagerStartOption);
}

const endRecord = () => {
    console.log('录音结束');
    recorderManager.stop();
}

const playVoice = () => {
    console.log('播放录音');
    player.play()
}

const stopVoice = () => {
    console.log('停止播放');
    player.stop()
}

高级功能

实时帧回调

UniAppX 平台

// 监听音频帧数据
recorderManager.onFrameRecorded((res) => {
  const { frameBuffer, isLastFrame } = res;
  // frameBuffer 为 ArrayBuffer 类型的音频帧数据
  // isLastFrame 表示是否为最后一帧

  // 处理音频帧数据,例如计算音量、绘制波形等
  const buffer = new Int16Array(frameBuffer!);

  let sum = 0;
  for (let i = 0; i < buffer.length; i++) {
    sum += Math.abs(buffer[i]);
  }
  const avgAmplitude = sum / buffer.length;
  console.log('当前音量振幅:', avgAmplitude);
});

// 移除帧回调监听
// recorderManager.offFrameRecorded(callback);

UniApp 平台

// 监听音频帧数据
recorderManager.onFrameRecorded((res) => {
  const { frameBuffer, isLastFrame, base64 } = res;
  // frameBuffer 为 ArrayBuffer 类型的音频帧数据
  // base64 为 string 类型的音频帧数据,是由于uniapp限制才把ArrayBuffer转成base64
  // isLastFrame 表示是否为最后一帧

  // 处理音频帧数据,例如计算音量、绘制波形等
  const buffer = new Int16Array(res.frameBuffer || uni.base64ToArrayBuffer(base64));

  let sum = 0;
  for (let i = 0; i < buffer.length; i++) {
    sum += Math.abs(buffer[i]);
  }
  const avgAmplitude = sum / buffer.length;
  console.log('当前音量振幅:', avgAmplitude);
});

// 移除帧回调监听
// recorderManager.offFrameRecorded(callback);

API

方法

getRecorderManager()

获取录音管理器实例。

recorderManager.start(options)

开始录音。

参数说明:

  • options Object 录音参数
    • frameSize Number 帧大小,单位:KB
    • sampleRate Number 采样率,单位:Hz
    • numberOfChannels Number 声道数
    • format String 录音格式,支持 'wav'、'pcm' 等
    • encodeBitRate Number 编码码率

recorderManager.stop()

停止录音。

recorderManager.pause()

暂停录音。

recorderManager.resume()

恢复录音。

recorderManager.cancel()

取消录音。

事件监听

recorderManager.onStart(callback)

监听录音开始事件。

recorderManager.onStop(callback)

监听录音停止事件。

回调参数:

  • res Object
    • tempFilePath String 录音文件临时路径
    • duration Number 录音时长,单位:ms
    • fileSize Number 文件大小,单位:Byte

recorderManager.onFrameRecorded(callback)

监听录音帧数据事件。

回调参数:

  • res Object
    • frameBuffer ArrayBuffer 音频帧数据
    • isLastFrame Boolean 是否为最后一帧

recorderManager.onError(callback)

监听录音错误事件。

recorderManager.onPause(callback)

监听录音暂停事件。

recorderManager.onResume(callback)

监听录音恢复事件(未实现)。

移除事件监听

  • recorderManager.offStart(callback)
  • recorderManager.offStop(callback)
  • recorderManager.offFrameRecorded(callback)
  • recorderManager.offError(callback)
  • recorderManager.offPause(callback)
  • recorderManager.offResume(callback)

平台兼容性

平台 支持情况 注意事项
iOS 需在 Info.plist 中添加麦克风权限
Android 需在 AndroidManifest.xml 中添加麦克风权限
HarmonyOS 需添加麦克风权限
Web 需在 HTTPS 环境下使用
小程序 需在小程序后台配置录音权限

常见问题

  1. Web 端录音无输出文件

    • 确保在 HTTPS 环境下使用
    • 检查浏览器是否支持 MediaRecorder API
  2. 音频帧数据处理

    • Web 端需注意音频数据格式,建议使用 16 位 PCM 格式
    • 处理音频数据时注意线程安全
  3. 权限问题

    • 确保在各平台都正确配置了麦克风权限
    • 在调用录音前先获取用户授权

打赏

如果你觉得本插件解决了你的问题,赠人玫瑰,手留余香。

隐私、权限声明

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

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

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