USB Audio Class 2.0 - 如何支持多比特率/采样率

时间:2017-01-17 17:03:58

标签: audio usb usb-descriptor

我有点困惑如何在USB Audio Class 2.0中添加对多比特率/采样率的支持。与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

谢谢!

2 个答案:

答案 0 :(得分:5)

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

执行多个比特率:具有其对应的音频数据格式描述符/等的备用设置,以便按顺序支持不同的比特率;例如:Alternate Setting 0(无端点),Alternate Setting 1(包含所有流/类描述符,格式描述符支持16位),Alternate Setting 2(包含所有流/类描述符,格式描述符支持24位)。

要执行多种采样率:您必须使用CUR,MIN,MAX格式的USB Audio Class 2.0文档,并控制主机。

例如:

#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是低端8位,定义是将16或32位整数转换为以低端格式化的8位整数数组。

答案 1 :(得分:1)

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

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