USB Audio Class (UAC)音频解读规范
前言
USB 音频非常流行,原因之一是USB Audio 是USB 标准的一部分,因此原生模式驱动程序可用于所有流程的操作系统(Win Linux Mac)。USB 音频是一种灵活的解决方案,因为任何PC都提供USB接口。
提示:以下是本篇文章正文内容
一、USB Audio Class ?
USB Audio Class,USB音频类,一个像USB这样的通用数据接口,可以有很多种实现数字音频数据传输的方式。不同的开发者可以根据自己的喜好和需求,定义任意的控制方式,传输模式,音频格式等等参数。
USB非常适合作为以PC为平台的音频(包括语音和音乐等)传输协议,而基于PC的电话系统从一开始就是USB接口发展的重要考量和推动力。从另一方面来说,USB接口拥有远远高于音频需求的带宽,可以传输极高品质(高采样率,高编码率,多声道)的音频数据。因此,例如电话,音乐回放,录音等音频功能都可以很容易在USB接口实现。
----- 摘录于百度百科
UAC是USB Audio Class的缩写,应用场景一般有会议宝、耳机、麦克风等设备。UAC分为UAC1.0和UAC2.0,由于UAC2.0,在windows上兼容性不好,在产品中,会带来各种坑,所以一般选择UAC1.0
二、USB Device Class Definition for Audio Devices
理论上,一个像USB这样的通用数据接口,可以有很多种实现数字音频数据传输的方式。不同的开发者可以根据自己的喜好和需求,定义任意的控制方式,传输模式,音频格式等等参数。但是,从市场和工业开发考虑,定义一个被不同开发者认可,高质量的,并且被标准化的音频传输机制是非常必要的。只有这样,才有可能使可能在USB上连接的不同音频设备保持最大的兼容性。标准化的传输机制,同样可以使软件驱动尽可能保持通用和简洁。而USB音频类(Audio Device Class)就是为了满足以上要求而定义。USB音频类包括了所有和USB接口兼容的音频流和音频控制功能,甚至包括使用模拟音源,利用USB接口作为控制接口的设备也被归入USB音频类设备。
----- 摘录于百度百科
因此UAC规范就应运而生了。协议的介绍可以参考 UAC规范(USB音频),协议这个东西理论上得多看几遍。才能够理解相关的一些细节。 看协议的过程中一般要经历过
- "这个是什么意思?" 代表目前的知识储备还不够多,很多概念不能够结合上下文理解,这就需要补充一些相关基础和理论知识点了。
- "哇,原来是这样啊" 有种恍然大悟的感觉,代表相关知识点初步掌握来
- "靠,这问题怎么还存在呢” 明明已经理解了这个知识点,理论上应该没问题的。代表实践过程中忽略了某些细节,还需要看一些协议的细节来完善之前的理解,才能够做到融会贯通。
- "问题重于解决了” 武功融会贯通,打通自身经脉,可以入门深造了。
1. UAC 速率
目前 UAC1.0 spec 规定每隔1ms 可以发送一笔数据, High speed 下单笔数据是1024Byte, 因此最大为 (1024 x 8 x 1000 )bit/s
理论上UAC1.0 支持 2 ch * 32 bit * 96000 Hz rate = 6144000 = 6144000 bit/s 或者 768 Byte /ms 这也符合 1024 字节的限制。UAC2.0 spec 是可以每隔125us 发送一笔数据, High speed 下标准为单笔数据是1024Byte, 因此最大为 (1024 x 8 x 1000 x 8 )bit/s
最大情况: 单次可以发送 3 笔数据, 所以为(1024 x 8 x 1000 x 8 x 3)bit/s
2. 描述符
对于需要从事USB开发的程序员来说,熟悉USB描述符是第一步也是很重要的一步。通过这篇文章可以针对描述符有个清楚的认识。USB定义的各种描述符有那些功能
- 每一个USB设备只有一个设备描述符,主要向主机说明设备类型、端点0最大包长、设备版本、配置数量等等。协议中是怎么描述设备描述符的呢 ?
//通过 UsbTreeView 工具查看一款带有UAC功能的音箱中的描述符 ---------------------- Device Descriptor ----------------------
bLength : 0x12 (18 bytes)
bDescriptorType : 0x01 (Device Descriptor)
bcdUSB : 0x200 (USB Version 2.00)
bDeviceClass : 0x00 (defined by the interface descriptors)
bDeviceSubClass : 0x00
bDeviceProtocol : 0x00
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0x12D1 (Huawei Technologies Co., Ltd.)
idProduct : 0x0206
bcdDevice : 0x0100
iManufacturer : 0x01 (String Descriptor 1)Language 0x0409 : "bestechnic"
iProduct : 0x02 (String Descriptor 2)Language 0x0409 : "HUAWEI Sound Joy"
iSerialNumber : 0x03 (String Descriptor 3)Language 0x0409 : "20160406.1"
bNumConfigurations : 0x01 (1 Configuration)
Data (HexDump) : 12 01 00 02 00 00 00 40 D1 12 06 02 00 01 01 02 .......@........03 01 ..
- 每一个USB设备至少有一个或者多个配置描述符,但是主机同一时间只能选择某一种配置,标准配置描述符主要向主机描述当前配置下的设备属性、所需电流、支持的接口数、配置描述符集合长度等等。
------------------ Configuration Descriptor -------------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x02 (Configuration Descriptor)
wTotalLength : 0x00E5 (229 bytes)
bNumInterfaces : 0x04 (4 Interfaces)
bConfigurationValue : 0x01 (Configuration 1)
iConfiguration : 0x00 (No String Descriptor)
bmAttributes : 0xA0D7: Reserved, set 1 : 0x01D6: Self Powered : 0x00 (no)D5: Remote Wakeup : 0x01 (yes)D4..0: Reserved, set 0 : 0x00
MaxPower : 0x32 (100 mA)
Data (HexDump) : 09 02 E5 00 04 01 00 A0 32 09 04 00 00 00 01 01 ........2.......00 00 0A 24 01 00 01 52 00 02 01 02 0C 24 02 01 ...$...R.....$..01 02 00 04 0F 00 00 00 11 24 06 02 01 02 03 00 .........$......00 00 00 00 00 00 00 00 00 09 24 03 03 01 01 00 ..........$.....02 00 0C 24 02 04 01 01 00 02 03 00 00 00 0D 24 ...$...........$06 05 04 02 03 00 00 00 00 00 00 09 24 03 06 01 ............$...03 00 05 00 09 04 01 00 00 01 02 00 00 09 04 01 ................01 01 01 02 00 00 07 24 01 03 00 01 00 0B 24 02 .......$......$.01 04 02 10 01 80 3E 00 09 05 83 0D 80 00 01 00 ......>.........00 07 25 01 00 00 00 00 09 04 02 00 00 01 02 00 ..%.............00 09 04 02 01 01 01 02 00 00 07 24 01 04 00 01 ...........$....00 0B 24 02 01 02 02 10 01 80 BB 00 09 05 03 0D ..$.............C0 00 01 00 00 07 25 01 00 00 00 00 09 04 03 00 ......%.........01 03 00 00 00 09 21 11 01 00 01 22 4B 00 07 05 ......!...."K...84 03 03 00 04 .....
- 每一个USB配置下至少有一个或者多个接口描述符,接口描述符主要说明设备类型、此接口下使用的端点数(不包括0号号端点),一个接口就是实现一种功能,实现这种功能可能需要端点0就够了,可能还需要其它的端点配合
---------------- Interface Descriptor -----------------
bLength : 0x09 (9 bytes)
bDescriptorType : 0x04 (Interface Descriptor)
bInterfaceNumber : 0x00
bAlternateSetting : 0x00
bNumEndpoints : 0x00 (Default Control Pipe only)
bInterfaceClass : 0x01 (Audio)
bInterfaceSubClass : 0x01 (Audio Control)
bInterfaceProtocol : 0x00
iInterface : 0x00 (No String Descriptor)
Data (HexDump) : 09 04 00 00 00 01 01 00 00 .........
//TODO
USB Audio Class (UAC)音频解读规范相关推荐
- linux uac 设备,USB Audio Class (UAC) 分析
一个UAC设备插入到Ubuntu 14.04电脑上dmesg中打印的信息如下: [ 2367.490491] usb 3-3.2: new full-speed USB device number 9 ...
- 成熟的 XMOS 方案 ——「 XMOS USB Audio 」
2022年3月17日 英国布里斯托尔 - 英国领先的芯片公司XMOS发布了其用于自动车牌识别(ALPR)的参考解决方案, 旨在将停车场的ALPR从复杂的资源密集型硬件转向简单的设备上的人工智能. 该方 ...
- USB Audio设计与实现
1 前言 本文将基于STM32F4 Discovery板,从零开始设计并实现一个USB Audio的例子. 2 设计构思 所谓的USB AUDIO就是制作一个盒子,这个盒子可以通过USB连接到PC,P ...
- usb audio知识点
已基本完成wavedev结构的usb音频驱动,现将开发心得及经验总结一下与大家分享/********************************************************** ...
- 全新的 XMOS USB Audio 方案主控 XU316-1024-QF60B-PP24
2021 年底,知名的音频芯片制造厂商 XMOS 正式发布了最新的 XCORE.AI 系列的芯片 XU316-1024-QF60B-PP24 ,这款芯片能够实现高达 768KHz PCM 和 DSD ...
- usb audio设备驱动
本文引用自ls.cq<usb audio设备驱动> http://bbs.driverdevelop.com/read.php?tid-118579-page-1.html 已基本完成wa ...
- USB Audio调试知识
1 USB isochronous 1.1 USB isochronous USB为何要用isochronous机制呢?这是一个历史问题,我们熟悉的SPDIF接口,AES/EBU接口都是基于isoch ...
- Ubuntu13下调试USB AUDIO的一些记录
最近想玩玩LINUX,于是双系统装了一个Ubuntu13.04. 在新系统下用着都还好,不过我自己DIY的USB DAC出了问题.在WIN7下能正常工作,但是在Ubuntu下就爆音不断,很明显是音频数 ...
- usb audio -- 异步方式介绍(1)
Usb audio目前已经有三个版本: 1.0,2.0,3.0 .1.0版本虽然出现的最早,但任然在大多数产品上使用,如TI 的 PCM系列usb audio芯片,基本上都是1.0的版本. 这里有一点 ...
最新文章
- 用 Python 动态可视化,看看比特币这几年
- 整数行hdu 1244 Max Sum Plus Plus Plus(dp)
- java返回json格式的状态码数据(二)
- 网络计算机室电源线怎么布,网吧综合布线(电源和网络)经验谈
- netflix 模式创新_创新设计模式:工厂模式
- GAN 的渐进式训练方法 PI-REC:手绘草稿迅速重建为完整图像...
- TCP的三次握手和四次挥手理解及面试题
- Xorg可以使用hot-plug了,不过配置很麻烦
- laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付
- excel制作项目甘特图
- 借助rtcp实现NACK丢包重传
- 【CVPR2022】论文列表与下载——PartThree
- Layui Table格式化日期(表格)
- educoder平台+大数据从入门到实战+14个模块习题
- java生成word文档(最简单)
- 1-乙基-3-甲基咪唑四氟硼酸盐/[C2MIm]BF4/cas:143314-16-3/分子量:197.97/离子液体
- 东芝推出采用DIP4封装的大电流光继电器
- Object-C中的Category
- 有耗介质中,电磁波的波速与频率的关系?--电磁波的色散效应
- 联想Y400电脑装WIN7无法重装系统解决方法
热门文章
- 度量学习DML之MoCO
- 计算机二级office高级应用知识点,2017年全国计算机二级考试MS Office高级应用知识点:电子邮件...
- Total Control电脑控制Android手机
- 执行 taro init myApp 报错 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\taro.ps1
- Django在Terminal中python manage.py startapp myapp报name ‘os‘ is not defined
- 2022爱分析・工业互联网实践报告
- Bmob后台云数据库
- 连接WiFi电脑却无法上网
- 一个关于穿山甲广告 native 崩溃分析
- 论文笔记1:Fast and Robust Multi-Person 3D Pose Estimation from Multiple Views