- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在学习 Windows 核心音频 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 来确定实际格式。
我可以看到有两个 channel 的 32 位样本。如何确定这些样本是整数还是浮点值?
[core-audio标签显然是针对 Apple API 的。 Windows Core Audio 是否有不同的标签?]
最佳答案
22 是 WAVEFORMATEX
之后的附加数据的大小数据:
cbSize
Size, in bytes, of extra format information appended to the end of the
WAVEFORMATEX
structure. This information can be used by non-PCM formats to store extra attributes for thewFormatTag
. If no extra information is required by thewFormatTag
, this member must be set to 0. ForWAVE_FORMAT_PCM
formats (and onlyWAVE_FORMAT_PCM
formats), this member is ignored. When this structure is included in aWAVEFORMATEXTENSIBLE
structure, this value must be at least 22.
如果您查看 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/
我第一次尝试使用 AudioClient 界面,但运气不好。到目前为止,我设法使用成功的 MMDeviceEnumerator 和 MMDevice 接口(interface)获得了默认的 Audio
在正常情况下,在只有立体声播放设备的设备上调用 IAudioClient->GetMixFormat() 方法将获得共享模式下的默认音频格式,即 2 声道格式。 但是由于某种原因,我需要让该设备上的所
我正在学习 Windows 核心音频 API。使用这个 Rendering a Stream例如,我发现 IAudioClient::GetMixFormat返回模棱两可的 WAVEFORMATEXT
我是一名优秀的程序员,十分优秀!