USB Audio Class (UAC)音频解读规范

这篇具有很好参考价值的文章主要介绍了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. "这个是什么意思?" 代表目前的知识储备还不够多,很多概念不能够结合上下文理解,这就需要补充一些相关基础和理论知识点了。
  2. "哇,原来是这样啊" 有种恍然大悟的感觉,代表相关知识点初步掌握来
  3. "靠,这问题怎么还存在呢” 明明已经理解了这个知识点,理论上应该没问题的。代表实践过程中忽略了某些细节,还需要看一些协议的细节来完善之前的理解,才能够做到融会贯通。
  4. "问题重于解决了” 武功融会贯通,打通自身经脉,可以入门深造了。

1. UAC 速率

USB Audio Class (UAC)音频解读规范
USB Audio Class (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             : 0xA0
 D7: Reserved, set 1     : 0x01
 D6: 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文章来源地址https://www.toymoban.com/news/detail-404845.html

到了这里,关于USB Audio Class (UAC)音频解读规范的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Audio音频开发】音频基础知识及PCM技术详解

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫 模拟信号 。模拟信号需要进行 数字化 以后才能在计算机中使用。 目前我们在计算机上

    2024年02月03日
    浏览(42)
  • Android Audio实战——音频播放(十)

            Android SDK 提供了3套音频播放的API,分别是:MediaPlayer,SoundPool,AudioTrack。简单来说,MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源。SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频

    2024年02月15日
    浏览(42)
  • 【Android Audio Focus 音频焦点】

    Android 中的音频焦点(Audio Focus)是一种机制,用于管理应用程序之间的音频资源竞争。当多个应用程序同时请求使用音频设备时,通过音频焦点机制可以确保最终用户的体验不受影响。 两个或两个以上的 Android 应用可同时向同一输出流播放音频。系统会将所有音频流混合在

    2024年02月03日
    浏览(46)
  • Audio API 实现音频播放器

    市面上实现音频播放器的库有很多,比如wavesurfer.js、howler.js等等,但是都不支持大音频文件处理,100多M的文件就有可能导致程序崩溃。总之和我目前的需求不太符合,所以打算自己实现一个音频播放器,这样不管什么需求 在技术上都可控。下面我们简单介绍下 wavesurferJs 、

    2024年02月10日
    浏览(43)
  • audio音频不能自动播放的解决方法

    由于浏览器限制的原因,不允许自动播放audio音频,尝试网上的方法后也没有进展(如果有解决方法,欢迎评论~) 一、首先创建 audio 标签 二、因为在页面刷新后需要先执行动画,动画完成后才去播放音乐,所以在执行 mounted 函数时,先加载音乐源 三、在动画完成后,进

    2024年02月11日
    浏览(110)
  • web audio api 实现音频播放

    最近被选中做音视频,挺幸运的吧,一直在接触新的项目,每次都能被分到新的项目组,干好多费头发的事情😂 上周五肝到12点半,总算是把音频编辑上了线 总结了一下,决定写一写,也盘点一下遇到的坑 web audio API是 HTML5新增的API,提供了在web上控制音频的一个有效通用的

    2023年04月09日
    浏览(49)
  • vue3 -- 使用audio标签播放音频

    公司系统内的审批页面,前端要根据后台推送的信息,使用’提示音’提醒用户进行对应审批操作。 vue3 项目 简介 | Vue.js (vuejs.org) TypeScript TypeScript: JavaScript With Syntax For Types. (typescriptlang.org) vite Vite | 下一代的前端工具链 (vitejs.dev) 下载好使用音频文件 音效网,保存本地。 将

    2024年02月01日
    浏览(43)
  • Audio Precision SYS-2722音频分析仪

    181/2461/8938产品概述: 2700系列专为需要最高性能的音频工程师而设计, 最低的失真和最大的灵活性。 2722的真正双域架构实现了以下方面的无与伦比的测量 模拟和数字信号:模拟发生器和分析仪性能超过 任何基于数字转换器的设计,而数字分析技术提供了广泛的 适用于任何领

    2024年01月16日
    浏览(36)
  • Android音频子系统(十五)------Audio调试经验

    你好!这里是风筝的博客, 欢迎和我一起交流。 两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常。 但是来到手机厂之后一切的都变了,之前的方式已经不适

    2024年02月13日
    浏览(41)
  • flutter开发实战-just_audio实现播放音频暂停音频设置音量等

    flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放,这里使用just_audio来实现播放音频暂停音频设置音量等 在pubspec.yaml引入just_audio 在iOS上,video_player使用的是AVPlayer进行播放。 在Android上,video_player使用的是ExoPlayer。 2.

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包