我正在学习 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 位样本 channel 。如何确定这些样本是整数还是浮点值?
[core-audio 标签显然是用于 Apple API。 Windows Core Audio 是否有不同的标签?]
最佳答案
22 是 WAVEFORMATEX
数据后面的附加数据的大小:
如果您查看 WAVEFORMATEXTENSIBLE
的定义,它以 WAVEFORMATEX
开头,然后包含额外的数据:
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample;
WORD wSamplesPerBlock;
WORD wReserved;
} Samples;
DWORD dwChannelMask;
GUID SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
这是
WAVEFORMATEX
数据之后的最少 22 个字节。SubFormat
字段包含您要查找的格式值。关于c++ - 从 IAudioClient::GetMixFormat 解释 WAVEFORMATEXTENSIBLE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41876857/