我正在学习Windows Core Audio API.使用这个Rendering a Stream示例,我发现IAudioClient :: GetMixFormat返回一个模糊的WAVEFORMATEXTENSIBLE,如下所示:
Format wFormatTag = WAVE_FORMAT_EXTENSIBLE (65534) nChannels = 2 nSamplesPerSec = 48000 nAvgBytesPerSec = 384000 nBlockAlign = 8 wBitsPerSample = 32 cbSize = 22 Samples // this is a union wValidBitsPerSample = 32 wSamplesPerBlock = 32 wReserved = 32
从Format.cbSize
22岁起,这就是整个结构; 没有SubFormat
GUID可以提供有关样本的更多信息.这看起来很奇怪,因为格式标签是WAVE_FORMAT_EXTENSIBLE
- 我认为 - 意味着您必须依靠Subformat
GUID来确定实际格式.
我可以看到有两个32位采样通道.如何确定这些样本是整数还是浮点值?
[ 核心音频标签显然是用于Apple API.Windows Core Audio是否有不同的标签?]
22是数据后面的附加数据的大小WAVEFORMATEX
:
CBSIZE
附加到
WAVEFORMATEX
结构末尾的额外格式信息的大小(以字节为单位).非PCM格式可以使用此信息来存储额外的属性wFormatTag
.如果不需要额外信息,则必须wFormatTag
将此成员设置为0.对于WAVE_FORMAT_PCM
格式(仅限WAVE_FORMAT_PCM
格式),将忽略此成员.当此结构包含在WAVEFORMATEXTENSIBLE
结构中时,此值必须至少为22.
如果你看一下定义WAVEFORMATEXTENSIBLE
,它以a开头,WAVEFORMATEX
然后包含额外的数据:
typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
这是WAVEFORMATEX
数据之后的最少22个字节.
该SubFormat
字段包含您要查找的格式值.