uniapp 如何获取实时录音数据

在uniapp中,如何获取实时录音的音频数据?我想实现录音过程中动态分析音频波形或实时上传分片数据,但找不到相关API。官方文档只有录音开始/停止的示例,请问如何通过uni.getRecorderManager()或其他方式监听实时音频流数据?需要具体代码示例或实现思路。

2 回复

在uniapp中,使用uni.getRecorderManager()创建录音管理器,通过监听onFrameRecorded事件获取实时录音数据。示例代码:

const recorderManager = uni.getRecorderManager()
recorderManager.onFrameRecorded((res) => {
  console.log(res.frameBuffer) // 实时音频数据
})
recorderManager.start({
  format: 'PCM',
  frameSize: 4096 // 每帧大小
})

注意:仅App端支持此功能,需配置录音权限。


在 UniApp 中,要获取实时录音数据,可以使用 uni.getRecorderManager() API 来管理录音,并通过监听 onFrameRecorded 事件获取实时音频数据帧。以下是具体步骤和示例代码:

实现步骤:

  1. 创建录音管理器:使用 uni.getRecorderManager() 初始化录音管理器。
  2. 配置录音参数:在 start 方法中设置参数,包括:
    • format:音频格式(如 aacmp3)。
    • sampleRate:采样率(如 16000、44100)。
    • numberOfChannels:声道数(1 或 2)。
    • frameSize:指定帧大小,触发 onFrameRecorded 回调(例如 4096 字节)。
  3. 监听实时数据:通过 onFrameRecorded 事件获取每一帧的音频数据(ArrayBuffer 格式)。
  4. 处理数据:对实时数据进行分析、传输或存储。

示例代码:

// 创建录音管理器实例
const recorderManager = uni.getRecorderManager();

// 监听实时数据帧
recorderManager.onFrameRecorded((res) => {
  const { frameBuffer } = res;
  console.log("实时音频数据帧:", frameBuffer);
  // 这里可以处理 frameBuffer,例如上传或分析
});

// 开始录音
recorderManager.start({
  format: 'aac',           // 音频格式
  sampleRate: 16000,       // 采样率
  numberOfChannels: 1,     // 单声道
  frameSize: 4096,         // 每帧大小,单位为字节
});

// 停止录音(可选)
// recorderManager.stop();

注意事项:

  • 平台兼容性onFrameRecorded 在部分平台(如微信小程序)支持较好,但需测试目标平台兼容性。
  • 性能影响:高频数据回调可能影响应用性能,建议根据需求调整 frameSize
  • 数据格式frameBuffer 为二进制数据,可通过 ArrayBuffer 处理,或转换为 Base64 进行传输。

通过以上方法,即可在 UniApp 中实现实时录音数据的获取。如有进一步需求(如实时语音识别),可结合云服务或本地处理库扩展功能。

回到顶部