音频数据存储格式简介:
- Pro Capture 采集设备最大可以采集 8 声道音频数据,每一帧数据包含 MWCAP_AUDIO_SAMPLES_PER_FRAME (192) 次采样,位深最大为 32 位(4 个字节)
- 采集到的每一帧音频数据按照左声道 0、1、2、3,右声道 0、1、2、3 次序保存。
- 音频数据按照从高字节到低字节的顺序存储,也就是有效数据都是从高位开始取出。
MWCapture SDK 提供采集多声道音频数据方法:
MWOpenChannel() → MWGetAudioInputSourceArray() → MWStartAudioCapture() → MWRegisterNotify() → MWGetAudioSignalStatus() → MWCaptureAudioFrame()
- SDK 方法中 MWGetAudioInputSourceArray() 获取通道音频输入源信号信息,由此可以得知有哪些音频格式信号,每个通道可以获取到多个音频格式
- 在采集之前需要注册通知事件对象,通知类型掩码需要有 MWCAP_NOTIFY_AUDIO_FRAME_BUFFERED,当音频数据缓冲完后会通知状态变化
- MWGetAudioSignalStatus() 可以获取音频信号的状态,由此结构体可以得知有效声道数,音频采样率,位深等等信息;
- MWCaptureAudioFrame() 包含有多声道数据,如果该声道状态无效,则数据为 0,所以只需要按照存储规则将每个声道数据取出,然后按照次序写入文件,就可以获得音频文件。
尤其注意的是,SDK 中获取到的音频数据是左声道 0、1、2、3,右声道 0、1、2、3 这样的次序,但是写入到文件中次序是左声道 0、右声道 0,左声道 1、右声道 1 。。。这样的次序,处理方式可以灵活变化;
- 采集设备对音频的采集是跟随输入源信号,采取默认格式,不具有设置采集参数的能力,对于重采样等需自己处理;
综上, 采集设备对单声道和多声道音频采集的处理方式一样,默认按照最大 8 声道来采集音频数据;可以使用 MWGetAudioSignalStatus() 得到有效声道数来对音频数据做处理。
需要注意的是,对于位深为 16 位(2 字节)的音频源,我们可以将得到的 4 字节源数据右移 16 位得到有效的音频数据。
示例 Examples \ Applications \ MultiAudioCapture 中有对多声道音频采集的调用示范。