2013-12-12 42 views
2

我正在研究USB耳机的演示,并对USB的音频端点描述符有疑问。 我有一个工作8-48kHz 16位音频流,我可以选择音频设备的Windows属性中的任何采样频率。我用下面的描述:USB 24位音频描述符

代码:

// 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) 

现在我想将其更改为24位8-48KHZ流。通过将AUDIO_LSR_SAMPLE_SIZE更改为0x03。当我这样做时,窗口属性窗口中的采样频率选择框在48kHz处变灰,所以我不能选择任何其他频率。当我玩这个设备的时候,流是24bit。 我已经尝试卸载驱动程序,但这并没有改变任何东西。

有没有人遇到这个问题,或者没有人有一个想法可能会导致这个问题?

回答

0

事实证明,问题不在这些描述符中,而是在通道配置错误的输入终端描述符中。