UAC规范(USB音频)
+ -

UAC 混音单元描述符

2021-08-27 1764 0

UAC混音单元描述符的英文全称为: Mixer Unit Descriptor,简称MUD.
和其它的单元描述符一样,混音单元描述符也有一个字段bUnitID,用来标识其惟一的拓扑单元ID.

UVC规范一样,在其音频控制接口内的所有终端(Terminal)单元(unit)不得具有相同的ID标识,每个单元或终端的ID必须具有惟一性。

UAC混音单元功能

混音单元(MU)将多个逻辑输入信道转换成多个逻辑输出信道。
混音单元

UAC混音单元描述符的结构-UAC1.0

typedef struct _MIX_UNIT_DESCRIPTOR;
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT8 bDescriptorSubtype;
    UINT8 bUnitID;
    UINT8 bNrInPins;
    UINT8 baSourceID[bNrInPins];
    UINT8 bNrChannels;
    UINT16 wChannelConfig;
    UINT8 iChannelNames;
    UINT8 bmControls[N];
    UINT8 iMixer;
}MIX_UNIT_DESCRIPTOR;
  • 0:bLength:UAC混音单元描述符的总长度。
  • 1:bDescriptorType:接口类型CS_INTERFACE
  • 2:bDescriptorSubtype:接口子类型MIXER_UNIT
  • 3:bUnitID:单元ID
  • 4:bNrInPins:拓扑中输入到该单元的管脚数量,该字段用于描述baSourceID数组的大小。
  • 5:baSourceID:输入管脚连接到到该单元的的终端或单元ID
  • 5+p:bNrChannels:混音器输出音频通道群集中的逻辑输出通道数。
  • 6+p:wChannelConfig:述逻辑通道的空间位置
  • 8+p:iChannelNames:字符串描述符的索引,描述第一个逻辑通道的名称
  • 9+p:bmControls:指示哪些混音控制可编程的bitmap。
  • 9+p+N:iMixer:用于描述该混音单元的字符串索引

由于混音单元可以重新定义其输出集群中包含的逻辑输出通道的空间位置,因此需要混频器输出集群描述符。bNrChannels、wChannelConfig和iChannelNames是通过单个输出引脚(“下游”连接)离开混频器单元的集群的特征。

混音单元描述符在bmControls位图字段中报告哪些控件可编程。此位图为二维位数组,每个逻辑输入有一行通道和每个逻辑输出通道的列。如果在位置[u,v]处设置了位,这意味着混音器单元包含一个可编程混音控制器,该控制器将输入通道u连接到输出通道v。
如果位[u,v]清除,则表示输入通道u和输出通道v之间的连接已断开不可编程。可以通过适当的请求检索其固定值。u的有效范围从1到n。v的有效范围是从1到m。

bmControls字段逐行存储位数组,其中第一个字节的MSb对应于输入通道1和输出通道1之间的连接。如果(n x m)不是8的整数倍,则位数组将用零填充,直到占用整数个字节。用于存储位数组的字节数N可以如下计算。

IF ((n x m) MOD 8) <> 0 THEN
    N = ((n x m) DIV 8) + 1
ELSE
    N = ((n x m) DIV 8)

UAC混音单元描述符的结构-UAC2.0

typedef struct _MIX_UNIT_DESCRIPTOR;
{
    UINT8 bLength;
    UINT8 bDescriptorType;
    UINT8 bDescriptorSubtype;
    UINT8 bUnitID;
    UINT8 bNrInPins;
    UINT8 baSourceID[bNrInPins];
    UINT8 bNrChannels;
    UINT32 bmChannelConfig;//变化
    UINT8 iChannelNames;
    UINT8 bmMixerControls[N];//新增
    UINT8 bmControls;//新增
    UINT8 iMixer;
}MIX_UNIT_DESCRIPTOR;
  • bmChannelConfig:描述逻辑通道的空间位置
  • bmMixerControls:指示哪些混音器控件可编程的位图
  • bmControls:
    • D1..0: Cluster Control
    • D3..2: Underflow Control
    • D5..4: Overflow Control
    • D7..6: Reserved. Must be set to 0

bmControls字段包含一组位对,指示存在哪些控件及其功能。如果控件存在,则它必须是主机可读的。如果某个控件不存在,则位对必须设置为0b00。如果控件存在但为只读,则位对必须设置为0b01。如果控件也是主机可编程的,则位对必须设置为0b11。不允许使用值0b10

UAC混音单元的内部结构如下图:
UAC混音单元的内部结构


UAC接口类型表

Descriptor Type Value
CS_UNDEFINED 0x20
CS_DEVICE 0x21
CS_CONFIGURATION 0x22
CS_STRING 0x23
CS_INTERFACE 0x24
CS_ENDPOINT 0x25
Descriptor Subtype Value
AC_DESCRIPTOR_UNDEFINED 0x00
HEADER 0x01
INPUT_TERMINAL 0x02
OUTPUT_TERMINAL 0x03
MIXER_UNIT 0x04
SELECTOR_UNIT 0x05
FEATURE_UNIT 0x06
PROCESSING_UNIT 0x07
EXTENSION_UNIT 0x08
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UAC 混音单元描述符
UAC混音单元描述符的英文全称为: Mixer Unit Descriptor,简称MUD.和其它的单元描述符一样,混音单元描述符也有一个字段bUnitID,用来标识其惟一的拓扑单元ID.和UVC规范一样,在其音频控制接口内的所有终端(Terminal)单元(unit)不得具有相同的ID标识,每......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!