You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从react-native-audio-record返回的原始字节中解码出PCM样本?

解答

你当前从回调中拿到的chunk本身就是符合你初始化配置的裸PCM数据流,没有WAV头不影响PCM数据本身的格式,不需要额外做解码操作,只需要按照你配置的采样参数将二进制Buffer解析为可读取的采样值数组即可。

你初始化时配置的是bitsPerSample: 16、channels: 1,对应PCM格式为16位有符号小端整数单声道流,可按如下代码解析:

AudioRecord.on('data', data => {
  const chunk = Buffer.from(data, 'base64');
  // 16位采样每个采样点占2字节,数组长度为总字节长度/2
  const pcmSamples = new Int16Array(chunk.length / 2);
  
  // 按小端序逐位读取16位整型采样值
  for (let i = 0; i < pcmSamples.length; i++) {
    pcmSamples[i] = chunk.readInt16LE(i * 2);
  }

  // 拿到的pcmSamples是取值范围在-32768~32767的采样数组,可直接用于可视化计算
  // 示例:计算当前音频块的平均幅值,可作为波形/音量展示的依据
  const averageAmplitude = pcmSamples.reduce((sum, val) => sum + Math.abs(val), 0) / pcmSamples.length;
  // 如需归一化到0-1区间,将采样值除以32768即可
});

注意事项

  • 如果你修改配置为bitsPerSample: 8,则将读取方法替换为readInt8,用Int8Array存储采样值即可
  • 如果配置了多声道(channels > 1),采样值按声道交替存储,例如双声道存储顺序为左声道采样1、右声道采样1、左声道采样2、右声道采样2,需要自行按顺序拆分不同声道的采样值
  • 如果你需要把实时PCM拼接成完整WAV文件,才需要手动在流开头补充对应格式的WAV头,仅做可视化不需要该操作

内容的提问来源于stack exchange,提问作者Anathapindika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:57:04