如何从原始字节重建 PCM 样本?

How to reconstruct PCM samples from raw bytes?

我正在使用包 react-native-audio-record 录制音频。我想使用临时数据来可视化东西。如此处的 example (函数 AudioRecord.on) 所示:

const options = {
  sampleRate: 16000,
  channels: 1,
  bitsPerSample: 16,
  wavFile: 'test.wav'
};

AudioRecord.init(options);

AudioRecord.on('data', data => {
  const chunk = Buffer.from(data, 'base64');
  console.log('chunk size', chunk.byteLength);
  // do something with audio chunk
}); 

如何将变量块解码为 PCM?据另一个论坛所述,此块不包括 .wav 文件的 headerBytes。

如评论中所述,在纯 JavaScript 中重建 PCM 是乏味的。因此,我使用 node-package node-wav(仅在包含 header 时有效)如下:

存储特定wav选项的header:

const header = Buffer.from([82, 73, 70, 70, 248, 167, ... ])

并按如下方式连接数据:

import wav from 'node-wav';
    
    AudioRecord.on('data', data => {
          const chunks = [header] 
          const chunk = Buffer.from(data, 'base64');
          chunks.push(chunk)
          const pcm = wav.decode(Buffer.concat(chunks)).channelData
        });

此方法只有在您可以重建 header 时才有效。另一方面,包 node-wave 表示为 high performance WAV decoder and encoder .