USB 音频 Class 2.0 - 如何支持多位 rates/sample 速率

USB Audio Class 2.0 - How to support multiple bit rates/sample rates

我有点困惑如何在 USB 音频 Class 2.0 中添加对多位 rates/sample 速率的支持。与 USB Audio Class 1.0(为您提供添加多个速率等选项)相比,USB Audio Class 2.0 不提供该选项。我将如何为此更改我的描述符?我在某处读到您使用了更多备用设置,但我不知道这会有什么帮助...

这是我的音频格式描述符:

audioformat.bLength                 = sizeof(usb_audio_format_type_1_desc_t)
audioformat.bDescriptorType         = 0x01
audioformat.bDescriptorSubtype      = 0x02
audioformat.bFormatType             = 0x01
audioformat.bSubSlotSize            = 3
audioformat.bBitResolution          = 24

谢谢!

是的,所以我想通了,因此赏金并不重要。

做多码率:对其对应的音频数据格式进行交替设置descriptors/etc,依次支持不同的码率;例如:备用设置 0(无端点)、备用设置 1(所有 stream/class 描述符、格式描述符支持 16 位)、备用设置 2(所有 stream/class 描述符、格式描述符支持 24 位) .

要执行多个采样率:您必须按照 USB 音频 Class 2.0 文档使用 CUR、MIN、MAX 格式并将控制权交给主机。

例如:

#define USB_AUDIO_SAMP_RATE_RANGE           { CPU16_TO_LE8_ARRAY(2), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_44_1), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_44_1), \
                                              CPU32_TO_LE8_ARRAY(0), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_48_0), \
                                              CPU32_TO_LE8_ARRAY(SAMPLE_RATE_48_0), \
                                              CPU32_TO_LE8_ARRAY(0)}

作为参考,LE8 是 lower endian 8 位,定义是将 16 或 32 位整数转换为以低端格式格式化的 8 位整数数组。

USB 音频 2.0 (UAC2) 中有一些时钟实体。但是 USB Audio 1.0 (UAC1) 没有。 UAC1 直接提供我们可以要求的各种采样率。

但是在UAC2中,我们不得不使用Clock Entities。有一些特定的描述符给出了有关时钟实体的信息。