如何将 24 位音频流传送到图形?

How is a 24-bit audio stream delivered to the graph?

这可能是一个很愚蠢的问题,但经过一段时间的搜索后,我找不到直接的答案。

如果源过滤器(例如 LAV 音频编解码器)正在处理 24 位完整音频流,如何将各个音频样本传送到图形? (为简单起见,让我们考虑一个单声道流)

它们是单独存储在一个 32 位整数上,最高有效位未使用,还是以打包形式存储,下一个样本的最低有效位占据备用,当前样本的最高有效位?

格式类似于 16 位 PCM:值是有符号整数,小端。

对于 24 位音频,您通常在 WAVEFORMATEXTENSIBLE 结构的帮助下定义格式,而不是 WAVEFORMATEX(好吧,后者在被某些过滤器接受方面也是可能的,但通常您应该使用前者)。

该结构有两个值:每个样本的位数和每个样本的有效位数。因此,可以将 24 位数据表示为 24 位值,也可以将 24 位数据表示为 32 位值的有意义的位。有效负载数据应与格式匹配。

一个字节内没有不同样本位的混合:

However, wBitsPerSample is the container size and must be a multiple of 8, whereas wValidBitsPerSample can be any value not exceeding the container size. For example, if the format uses 20-bit samples, wBitsPerSample must be at least 24, but wValidBitsPerSample is 20.

据我所知,通常只有 24 位值,即每个 PCM 样本三个字节。

非 PCM 格式可能会定义不同的封装并更有效地使用 "unused" 位,因此,例如,20 位音频样本会占用 5 个字节。