【问题标题】:USB 24bits audiostream descriptorsUSB 24 位音频流描述符
【发布时间】: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 位的。 我已经尝试卸载驱动程序,但这并没有改变任何东西。

有没有人也遇到过这个问题,或者有没有人知道什么可能导致这个问题?

【问题讨论】:

    标签: c audio embedded usb


    【解决方案1】:

    原来问题不在于这些描述符,而在于通道配置错误的输入终端描述符。

    【讨论】:

    • 您对 ChannelConfig 所做的更改是什么?
    • 已经有一段时间了,但是根据 bNrChannels 设置,您需要设置正确的 wChannelConfig,所以如果我没记错的话,您需要将 wChannelConfig 设置为 24 或 3。
    • wChannelConfig 是每个通道的位置,如左前等。bSubframeSize = 3 是 24 位
    猜你喜欢
    • 2014-06-24
    • 2022-09-23
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多