如何将 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 个字节。
这可能是一个很愚蠢的问题,但经过一段时间的搜索后,我找不到直接的答案。
如果源过滤器(例如 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 个字节。