我正在研究USB耳机的演示,我对USB的音频端点描述符有疑问。 我有一个8-48kHz的16位音频流,我可以在音频设备的windows属性中选择任何采样频率。我使用以下描述符:
代码:
// Interface 2: Speaker, alternate setting 1. Type 1 format descriptor.
static const UsbAudioStreamingType1DescriptorType UsbIfd2Format =
{
sizeof(UsbAudioStreamingType1DescriptorType), // uint8 bLength;
UDESC_CS_INTERFACE, // uint8 bDescriptorType;
UA_FORMAT_TYPE, // uint8 bDescriptorSubtype;
UA_FORMAT_TYPE_I, // uint8 bFormatType;
AUDIO_LSR_NOC, // uint8 bNrChannels;
AUDIO_LSR_SAMPLE_SIZE, // uint8 bSubFrameSize;
AUDIO_LSR_SAMPLE_SIZE << 3, // uint8 bBitResolution;
0x00, // uint8 bSamFreqType;
(uint8)((AUDIO_LSR_MIN_SAMPLE_FREQUENCY) & 0xFF), // uint8 first byte minumum sample frequency
(uint8)((AUDIO_LSR_MIN_SAMPLE_FREQUENCY >> 8) & 0xFF), // uint8 second byte minumum sample frequency
(uint8)(((0x10000000 | AUDIO_LSR_MIN_SAMPLE_FREQUENCY) >> 16) & 0xFF), // uint8 third byte minumum sample frequency
(uint8)((AUDIO_LSR_MAX_SAMPLE_FREQUENCY) & 0xFF), // uint8 first byte maximum sample frequency
(uint8)((AUDIO_LSR_MAX_SAMPLE_FREQUENCY >> 8) & 0xFF), // uint8 second byte maximum sample frequency
(uint8)(((0x10000000 | AUDIO_LSR_MAX_SAMPLE_FREQUENCY) >> 16) & 0xFF), // uint8 third byte maximum sample frequency
};
// Interface 2: Speaker, alternate setting 1. Audio endpoint descriptor.
static const UsbAudioEndpointDescriptorType UsbIfd2StdEndpoint =
{
sizeof(UsbAudioEndpointDescriptorType), // uint8 bLength;
USB_DT_ENDPOINT, // uint8 bDescriptorType;
USB_DIR_OUT | USB_EP_AUDIO_RX, // uint8 bEndpointAddress;
0x01, // uint8 bmAttributes;
((AUDIO_LSR_MAX_SAMPLE_FREQUENCY / 1000) * AUDIO_LSR_SAMPLE_SIZE) * AUDIO_LSR_NOC, // uint16 wMaxPacketSize;
0x01, // uint8 bInterval;
0x00, // uint8 bRefresh;
0x00, // uint8 bSynchAddress;
};
使用以下设置:
// Sample frequencies
#define AUDIO_LSR_MIN_SAMPLE_FREQUENCY 0x01F40 // 8kHz
#define AUDIO_LSR_MAX_SAMPLE_FREQUENCY 0x0BB80 // 48kHz
// Sample size
#define AUDIO_LSR_SAMPLE_SIZE 0x02 // in bytes
// Defines for mono/stereo.
#define AUDIO_LSR_NOC 0x02 // Number Of Channels (stereo)
现在我想将其更改为8-48kHz 24位流。通过将AUDIO_LSR_SAMPLE_SIZE更改为0x03。当我这样做时,窗口属性窗口中的采样频率选择框在48kHz处显示为灰色,因此我无法选择任何其他频率。当我向设备播放内容时,流是24位。 我已经尝试卸载驱动程序,但这并没有改变任何东西。
有没有人遇到这个问题,或者有人知道可能导致这个问题的原因吗?
答案 0 :(得分:1)
事实证明问题不在这些描述符中,而是在输入终端描述符中,其中通道配置错误。