Adr*_*thy 3 c++ audio winapi wasapi
我正在学习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
Run Code Online (Sandbox Code Playgroud)
从Format.cbSize22岁起,这就是整个结构; 没有SubFormatGUID可以提供有关样本的更多信息.这看起来很奇怪,因为格式标签是WAVE_FORMAT_EXTENSIBLE- 我认为 - 意味着您必须依靠SubformatGUID来确定实际格式.
我可以看到有两个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;
Run Code Online (Sandbox Code Playgroud)
这是WAVEFORMATEX数据之后的最少22个字节.
该SubFormat字段包含您要查找的格式值.
| 归档时间: |
|
| 查看次数: |
985 次 |
| 最近记录: |