什么是UAC/UAD
UAC是USB Audio Class的缩写,有时也叫UAD,UAD是USB Audio Device的缩写。
UAC/UAD定义了在USB规范下实现音频的设备的实现和控制功能,这些功能包括不仅音频数字部分的,也包括模拟部分。这些音频数据(模拟和数字)和用于直接控制音频环境的功能,如音量和音调控制。这个音频设备类不包括操作与音频数据的复制,如磁带传输机制或CD-ROM驱动器控制。
“)
ADC(模拟转数字)之前的是模拟部分,之后的是数字部分。
DAC(数字转模拟)之前的是数字部分,之后是模拟部分。
从用户功能来说,主要包括USB麦克风、USB声卡和其它音频设备的功能控制和接口标准,但其内部却有多种复杂的功能。
UAC设备类
根据USB设备类定义,UAC设备的类号为1.
#define USB_DEVICE_CLASS_AUDIO 0x01
UAC和UVC的区别
我们一般购买的USB摄像头,不但包括摄像头本身,大部分情况下也包含一个USB麦克风。这种设备遵循USB通用驱动规范,在Windows下由USB驱用驱动程序USBCCGP.sys实现枚举其子设备。
如笔者手中有一UVC摄像头,在Windows下系统根据其接口关联描述述分别枚举出一个UVC摄像头和一个UAC麦克风。
所以说,UVC和UAC分别对应USB的两种设备类型规范,只是由于在日常使用过程中通常两者一起存在而已。‘
对UVC规范感兴趣的同学可以查看本站的UVC规范1.5教程。
UAC的版本及历史
UAC经历了以下几个版本:
版本 | 时间 | 文档 | 描述 |
---|---|---|---|
1.0 | Mar. 18, 98 | Audio10.pdf | Release 1.0 |
2.0 | May. 31, 06 | Audio20 final.pdf | Release 2.0 |
3.0 | Sep. 22, 16 | Audio30.pdf | Release 3.0 |
3.0-Errata | Apr. 05, 19 | Audio30-Errata.pdf | Release 3.0-Errata |
关于Windows对UAC的版本支持,这里有一个讨论:https://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_devices/windows-support-for-usb-audio-20/0d633b9f-3193-4c63-8654-fb10b3614a04?page=1&auth=1
UAC支持版本对比图
UAC2.0由于支持USB High Speed,从而天生带有高带宽、低延时的优势。这些优势转化为对于Hi-Resolution Auido的支持。
- UAC1.0最高只支持到双声道192Khz 16b的音源:(2 x 192 x 16) / 1024 = 6Mb = 6Mb/8 = 0.75MB,仅支持USB2.0传输
- UAC2.0可以最高支持15声道384Khz 32b的音源:(15 x 384K x 32) /1024 = 180Mb = 18Mb/8 = 3MB,支持USB3.0传输
UAC-USB | Isochronous Endpoint |
---|---|
UAC1 | 最高速度: ≤8.2Mb/s |
UAC2 | 标准速度: ≤65.5Mb/s 最高速度: ≤196.6Mb/s |
UAC2.0协议中提供更多的功能。支持更多的设备描述,增加clock domain、clock description、clock
control支持, 添加sampling rate converter unit支持,
UAC2.0协议文档:[http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf](http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf)
在kernel/msm-3.18/sound/usb/mixer.c
/*support for UAC2 effect units */
可以看到驱动代码已经支持UAC2.0了,就看有没有支持UAC2.0的codec做出来了。
采样率48000,位深度 16bit ,通道数2,设备1秒内可以采集到多少音频数据?
48000Hz x 16b x 2ch = 1536000(bit)
(48000Hz x 16b x 2) / 8 = 192000 (Byte) = 192(KB)
192(KB) / 1024 = 0.1875(MB)
设备在一秒内可以采集192KByte数据.
如果16000hz 16bit,计算UAC1.0和UAC2.0理论上最多支持多少通道?
UAC1.0 high speed支持通道数:8.2Mb / (16000 x 16 / 1024 / 1024) = 8.2Mb / 0.25Mb = 32.8 = 32(理论值)
UAC2.0 full speed支持通道数:65.5Mb / (16000 x 16 / 1024 / 1024) = 65.5Mb / 0.25Mb = 262(理论值)
UAC2.0 high speed支持通道数:196.6Mb / (16000 x 16 / 1024 / 1024) = 196.6Mb / 0.25Mb = 786(理论值)
以上部分内容来源于:http://www.cymount.com/news/shownews.php?id=65
UAC3.0的兼容性
UAC3.0不兼容以前的任何版本。
当然如果为了实现与UAC1.0和UAC2.O版本的兼容,需要做以下几点:
- 设备的第一个USB配置描述符(索引0)应包含音频接口符合ADC 1.0或ADC 2.0的关联(AIA)。换句话说,如果主机软件选择第一个索引设备配置,设备应显示符合ADC 1.0或ADC 2.0。此要求应允许音频功能与现有主机完全互操作与当前传统ADC 1.0或ADC 2.0函数相同。
- 使用第二个配置描述符实现UAC3.0。