如何采集多声道音频数据

音频数据存储格式简介:

  1. Pro Capture 采集设备最大可以采集 8 声道音频数据,每一帧数据包含 MWCAP_AUDIO_SAMPLES_PER_FRAME (192) 次采样,位深最大为 32 位(4 个字节)
  2. 采集到的每一帧音频数据按照左声道 0、1、2、3,右声道 0、1、2、3 次序保存。
  3. 音频数据按照从高字节到低字节的顺序存储,也就是有效数据都是从高位开始取出。

MWCapture SDK 提供采集多声道音频数据方法:

MWOpenChannel() → MWGetAudioInputSourceArray() → MWStartAudioCapture() → MWRegisterNotify() → MWGetAudioSignalStatus() → MWCaptureAudioFrame()

  1. SDK 方法中 MWGetAudioInputSourceArray() 获取通道音频输入源信号信息,由此可以得知有哪些音频格式信号,每个通道可以获取到多个音频格式
  2. 在采集之前需要注册通知事件对象,通知类型掩码需要有 MWCAP_NOTIFY_AUDIO_FRAME_BUFFERED,当音频数据缓冲完后会通知状态变化
  3. MWGetAudioSignalStatus() 可以获取音频信号的状态,由此结构体可以得知有效声道数,音频采样率,位深等等信息;
  4. MWCaptureAudioFrame() 包含有多声道数据,如果该声道状态无效,则数据为 0,所以只需要按照存储规则将每个声道数据取出,然后按照次序写入文件,就可以获得音频文件。
    尤其注意的是,SDK 中获取到的音频数据是左声道 0、1、2、3,右声道 0、1、2、3 这样的次序,但是写入到文件中次序是左声道 0、右声道 0,左声道 1、右声道 1 。。。这样的次序,处理方式可以灵活变化;
  5. 采集设备对音频的采集是跟随输入源信号,采取默认格式,不具有设置采集参数的能力,对于重采样等需自己处理;

综上, 采集设备对单声道和多声道音频采集的处理方式一样,默认按照最大 8 声道来采集音频数据;可以使用 MWGetAudioSignalStatus() 得到有效声道数来对音频数据做处理。

需要注意的是,对于位深为 16 位(2 字节)的音频源,我们可以将得到的 4 字节源数据右移 16 位得到有效的音频数据。

示例 Examples \ Applications \ MultiAudioCapture 中有对多声道音频采集的调用示范。