Fork me on GitHub
侧边栏

UAC简介及对比

什么是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麦克风
所以说,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(理论值)

UAC支持版本对比图

以上部分内容来源于: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。
posted @ 2024-12-27 11:34  yooooooo  阅读(451)  评论(0)    收藏  举报