更新记录

1.8.2(2025-03-31)

  • 修复蓝牙麦克风识别异常的问题
  • 修改默认采样率为16000Hz(IOS特殊48000Hz、蓝牙麦克风16000Hz)
  • 更新补充demo案例代码

1.8.0(2025-03-31)

  • 移除iOS配置缓冲区大小参数
  • 一些log注释修改
  • 文档补充修改
  • 增加demo代码

1.0.0(2025-03-15)

  • 实时音频流数据获取
查看更多

平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 4.53,Android:5.0,iOS:10,HarmonyNext:不支持 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

darifo-audio

一个基于 UniApp UTS 的录音插件,支持实时监听和录音保存,提供了 iOS 和 Android 双平台支持。

功能特性

  • 实时音频流数据获取
  • 录音状态管理
  • 完整的错误处理
  • 支持 iOS/Android 双平台

安装

  1. 将插件放入项目的 uni_modules 目录
  2. HBuilderX 中点击 "重新安装依赖"
  3. 在 manifest.json 中配置相应平台的权限

使用方法

引入模块

import { audioRecorder } from '@/uni_modules/darifo-audio'

启动麦克风录音


// 获取平台
const platform = uni.getSystemInfoSync().platform;

// IOS平台
if (platform === "ios") {
      recorder.start( (code, message) => {
          if (code === 0) {
            console.log("[Voice] 录音设备初始化成功");
            // 这里执行循环获取帧数据的函数
            startFrameLoop();
          } else {
            console.error("[Voice] 录音设备初始化失败:", code, message);
            error.value = `录音设备错误: ${message}`;
            isRecording.value = false;
          }
        }
      );
} 

// 安卓平台
if (platform === 'android') {
   recorder.onStart((code, message, data) => {
        // 先检查录音状态,如果已经停止,则不处理数据
        if (!isRecording.value) {
          console.log("[Voice] 录音已停止,不处理音频数据");
          try {
            recorder.stop();
          } catch (err) {
            console.error("[Voice] 停止录音设备失败:", err);
          }
          return;
        }

        if (code === 0) {
          console.log("[Voice] Android获取到音频数据:", data);
          // 再次检查录音状态和WebSocket连接状态
          if (isRecording.value && recognizer.isConnected) {
            // 这里发送音频数据
            // recognizer.sendAudioData(data);
          } else {
            console.log("[Voice] 录音已停止或WebSocket未连接,不发送数据");
          }
        } else {
          console.error("[Voice] 录音错误:", code, message);
          error.value = `录音设备错误: ${message}`;
          isRecording.value = false;
          try {
            recorder.stop();
          } catch (err) {
            console.error("[Voice] 停止录音设备失败:", err);
          }
        }
   });
}

停止录音

console.log("[Voice] 停止录音设备");
recorder.stop();

定时器循环获取帧(IOS平台)

function startFrameLoop() {
  console.log("[Voice] 开始音频帧循环");
  let lastFrameTime = Date.now();

  // 先清理可能存在的旧定时器
  stopFrameLoop();

  frameTimer = setInterval(() => {
    try {
      // 如果已经停止录音,立即清理定时器
      if (!isRecording.value) {
        console.log("[Voice] 录音已停止,终止音频帧循环");
        stopFrameLoop();
        return;
      }

      // 通过recorder.getFrame获取当前音频数据帧
      const frame = recorder.getFrame();

      if (frame && frame.byteLength > 0) {
        const now = Date.now();
        console.log("[Voice] 获取音频帧:", {
          time: now - lastFrameTime,
          size: frame.byteLength,
        });
        lastFrameTime = now;

        // 只在录音状态时发送数据
        if (isRecording.value) {
         // 这里发送音频数据到服务器
         //  recognizer.sendAudioData(frame);
        }
      }
    } catch (err) {
      console.error("[Voice] 获取音频帧失败:", err);
      console.error("[Voice] 错误堆栈:", err.stack);
      error.value = `获取音频失败: ${err.message}`;
      stopRecording();
    }
  }, 100);
}

// 停止循环
function stopFrameLoop() {
  if (frameTimer) {
    clearInterval(frameTimer);
    frameTimer = null;
  }
}

权限配置

Android 平台

需要在 AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

iOS 平台

需要在 Info.plist 中添加以下权限描述:

<key>NSMicrophoneUsageDescription</key>
<string>需要使用麦克风进行录音</string>

错误码说明

错误码 说明
200001 麦克风引擎启动失败
200002 录音初始化失败
200003 录音启动失败
200004 麦克风权限拒绝
200006 未知权限问题

注意事项

  1. 权限处理

    • 使用前请确保已获取录音权限
    • Android 10+ 需要动态申请权限
  2. 内存管理

    • 及时停止录音并释放资源
    • 避免长时间录音导致内存占用过大
  3. 兼容性

    • iOS 支持版本:iOS 10.0+
    • Android 支持版本:Android 5.0+

常见问题

  1. 录音无声音

    • 检查麦克风权限是否授予
    • 检查设备是否静音
    • 检查音频会话配置
  2. 内存占用过高

    • 避免过长时间录音
    • 及时释放不需要的录音实例

更新日志

1.0.0

  • 初始版本发布
  • 支持实时音频流获取
  • 提供完整的错误处理机制

作者

darifo

隐私、权限声明

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

麦克风

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

插件不采集任何数据

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

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