UAC简介及对比

news/2024/12/27 11:35:29/文章来源:https://www.cnblogs.com/linhaostudy/p/18635288

什么是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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859759.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s 1.23 安装kubesphere 3.4

参考 : https://blog.csdn.net/weixin_43810267/article/details/1333477361、下载kubesphere的yamlwget https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/kubesphere-installer.yaml wget https://github.com/kubesphere/ks-installer/releases/downlo…

【linux合集】单机部署clickhouse--ubuntu环境

clickhouse单机部署--ubuntu部署 导入clickhouse密钥操作 (ClickHouse(大数据分析DBMS)的软件包由其开发人员使用公钥进行签名,我们需要在我们的系统上使用它。这是因为只有我们的系统才能验证我们得到的软件包,它们来自源代码,因为它们是由其开发人员发布的。并且没有被…

欧拉OpenEuler安装xxl-job-admin

1. 安装xxl-job-admin unzip xxl-job-admin.zip ls mv xxl-job-admin-2.4.0/ /home cd /home/ xxl-job-admin-2.4.0/ cd bin/ chmod +x *.sh2. 配置 cd ../conf/ vim application.properties 3.启动 cd ../bin/ sh startup.sh 4. 配置防火墙 firewall-cmd --permanent --add-po…

什么是 单点登录SSO?SSO工作原理

单点登录(SSO)让用户通过一组凭证访问多个应用,简化了多平台登录流程。在没有 SSO 的情况下,用户需为每个应用单独管理用户名和密码,而 SSO 通过身份提供商(IdP)和信任的服务提供商(SP)实现统一认证。这不仅减少了用户的密码管理负担,还降低了 IT 管理员的工作量,提…

K-means算法分析与实践

本文章详解了K-means聚类算法的原理及其优缺点,进行了K-means聚类算法的Python及C++基础实现。一、聚类分析概述定义:根据“物以类聚”原理,将本身尚未归类的样本根据多个维度(属性)聚集成不同的组,这样的一组数据对象的集合叫做簇或群组。经过聚类划分后的群组特性目标:…

(五).NET6.0使用Serilog进行配置和实现日志记录

1.首先安装Serilog六件套神装包也可以对个别相应的包进行删除等,例如:1是读取配置文件的,如果不需要通过配置文件进行操作,就可以不使用这个包。2是打印到控制台的,如果不需要打印到控制台,也可以不引用。3是写入到文件的,如果不需要写入到文件,也是可以不提供的。我在…

简洁的带缩略图的jquery焦点图特效

这是一款简洁的带缩略图的jquery焦点图特效。该焦点图使用无序列表来作为轮播图片结构,通过CSS来进行布局,然后使用简单的jquery代码来控制焦点图的切换。在线预览 下载使用方法 在页面中引入jquery。<script src="path/to/jquery.min.js" type="text/j…

(四).NET6.0程序部署到Docker上

1.确保安装Docker2.把需要部署到Docker上面的项目,咱们先添加Docker的支持,启动项目右键 -> 添加 -> Docker支持,选择 Linux然后会自动生成Dockerfile文件,在里面可以看见Docker有关的配置信息。3.对Dokcerfile的配置文件做一些更改4.然后修改dockerfile文件的属性5.…

(二).NET6.0使用Filter过滤器

1、创建一个webapi方法2、创建过滤器,继承自Attribute, IAsyncActionFilter 不存在需要先手动引用有关的包:Microsoft.AspNetCore.Mvc 继承 Attribute 是为了让 你定义的Filter 成为一个自定义特性,使其能够通过特性语法 [XXXFilter] 应用到控制器或方法上,从而为它们添加元…

欧拉OpenEuler安装tomcat

1. 安装tomcat unzip tomcat.zip mv tomcat /home/ cd /home/tomcat chmod +x *.sh cd bin chmod +x *.sh/home/tomcat下 三个sh 进行启动关闭 2. 开web端口 firewall-cmd --list-ports firewall-cmd --permanent --add-port=9090/tcp firewall-cmd --reload.zstitle { width:…

Java编程规范-processXXX()和handleXXX()的区别

Java 编程规范 类名、接口名: 类名和接口名应该是名词,首字母大写,采用驼峰命名法。例如:CustomerData,OrderProcessor。 方法名: 方法名应该是动词,首字母小写,采用驼峰命名法。例如:calculateTotal,processOrder。 变量名: 变量名应该清晰、描述性强,首字母小写,…

欧拉OpenEuler安装Tengine

1. 安装tengine tar -zxvf tengine-3.1.0.tar.gz cd tengine-3.1.0/ yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel chmod +x *.sh ./configure --prefix=/home/nginx --with-http_gzip_static_module --with-http_realip_module --with-http_stub_st…