测试系统: macOS Sierra 10.12.5
UAC2.0上要支持多个采样率,只要在ClockSource Range Request的反馈(GetRequest)中进行添加即可
SAMPLE_FREQ_NUM(2), /* wNumSubRanges */
SAMPLE_FREQ_4B(I2S_AudioFreq_48k), /* dMIN(1) */
SAMPLE_FREQ_4B(I2S_AudioFreq_48k), /* dMAX(1) */
SAMPLE_FREQ_4B(0x00), /* dRES(1) */
SAMPLE_FREQ_4B(I2S_AudioFreq_96k), /* dMIN(2) */
SAMPLE_FREQ_4B(I2S_AudioFreq_96k), /* dMAX(2) */
SAMPLE_FREQ_4B(0x00), /* dRES(2) */
但我遇到一个问题,如果你在端点描述符中申明的最大包大小达不到上述列表采样率的要求, OSX是不会显示未达到要求的采样率选项的。例如,使用下面的端点描述符,96K采样率的选项就不会出现:
/* Endpoint 1 - Standard Descriptor */
AUDIO_20_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
AUDIO_OUT_EP, /* bEndpointAddress 3 out endpoint for Audio */
USB_ENDPOINT_TYPE_ADAPTIVE, /* bmAttributes */
AUDIO_PACKET_SZE(I2S_AudioFreq_48k), /* XXXX wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
0x01, /* bInterval */
/* 07 byte*/