【发布时间】:2013-12-30 18:01:52
【问题描述】:
我正在制作 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。当我这样做时,Windows 属性窗口中的采样频率选择框在 48kHz 处灰显,因此我无法选择任何其他频率。当我在设备上播放某些东西时,流是 24 位的。 我已经尝试卸载驱动程序,但这并没有改变任何东西。
有没有人也遇到过这个问题,或者有没有人知道什么可能导致这个问题?
【问题讨论】: