音频模块的介绍

news2025/2/26 22:58:08

一、术语总结

1.HIFI 级
  “HIFI”一词通常指高保真音频(High-Fidelity Audio),是指尽可能保持音频信号的原始质量,让听众感受到最真实的音乐表现。因此,“HIFI级”通常指具有高保真音频性能的产品或设备,例如高保真耳机、音响设备、音频处理器等。

  在智能音箱、智能音响等智能家居设备中,也经常使用“HIFI级”来形容其音频性能。这些设备通常具有高质量的音频解码器、音频放大器、高保真扬声器等音频元件,能够提供更加真实、清晰、细腻的音乐表现,带给用户更好的听觉体验。

2.支持最高 192K 24BIT 的音频播放
  “支持最高 192K 24BIT 的音频播放”通常指音频设备或软件可以播放采样率为192kHz、位深度为24 bit的音频文件或流。其中,“采样率”指音频信号每秒钟采样的次数,即采样频率,常用的采样率包括44.1kHz、48kHz、96kHz、192kHz等;而“位深度”指每个采样点的量化位数,即采样精度,常用的位深度包括16 bit、24 bit、32 bit等。

3.立体声的声道数
  立体声是一种常见的声音录制和播放方式,使用两个声道来传递左右声道的声音信号。因此,立体声的声道数为2,分别对应左声道和右声道。

  在音频处理中,立体声可以提供更加真实、立体的音效体验,使得听众可以感受到更加逼真的音乐表现。同时,立体声也可以用于区分不同声源的位置和方向,例如在影视制作中,可以通过立体声的录制和处理,来实现对话、环境声、音效等音频元素的区分和定位,从而提升影视作品的视听体验。

  需要注意的是,在处理立体声音频时,需要对左声道和右声道进行相应的处理和调整,以保证两个声道之间的平衡和协调。同时,在播放立体声音频时,也需要使用支持立体声播放的设备和软件,以获得最佳的音频效果。

4.我们播放的音频支持:16 位和 24 位,立体声,所以每个取样为 4/6 个字节,低字节在前,高字节在后。
  在音频处理中,采样深度表示每个采样点的量化位数,采样深度越高,表示每个采样点可以表达的音频细节和动态范围也越大,因此音频质量也可以更高。立体声表示音频信号采用了两个声道进行录制或播放,通常用于模拟现实场景中的立体声效果。

  每个取样数据占用4/6个字节,这是由于16位采样深度的音频每个采样点占用2个字节,而24位采样深度的音频每个采样点占用3个字节,因此每个立体声采样点占用的字节数为4或6个字节。在存储这些采样点时,采用小端序的方式将低字节存储在前面,高字节存储在后面,以保证音频数据的正确解析和播放。

5.立体声差分输入
  立体声差分输入是指在音频电路中采用差分信号传输方式,通过两个信号线分别传输左右声道的差分信号,从而实现立体声的音频输入。

  在差分信号传输中,每个信号线传输的是相对于共同参考点的电压差值,而不是单独的信号电压值。在立体声差分输入中,左声道和右声道的差分信号分别通过两个信号线传输,其中一个信号线传输左声道信号与参考点之间的电压差值,另一个信号线则传输右声道信号与参考点之间的电压差值。通过解码差分信号,可以还原出左声道和右声道的原始音频信号。

  相对于单端输入,立体声差分输入可以提供更好的抗干扰能力和信噪比,从而提高音频输入的质量和稳定性。同时,立体声差分输入也可以用于一些专业音频设备和高保真音响系统中,以提供更加真实、立体的音效体验。

  需要注意的是,在使用立体声差分输入时,需要使用支持差分输入的音频设备,并正确连接差分输入的信号线和参考点。同时,在处理和解码差分信号时,也需要使用相应的差分信号处理电路,以保证音频输入的正确性和质量。

6.MSB和LSB
  MSB是英文“Most Significant Bit”的缩写,意为“最高有效位”。在数字电路和计算机科学中,MSB通常用于描述二进制数中的最高位(即最左侧的位),它的权值是二进制数中最大的,因此也被称为“最高位”。LSB是英文“Least Significant Bit”的缩写,意为“最低有效位”。在数字电路和计算机科学中,LSB通常用于描述二进制数中的最低位(即最右侧的位),它的权值是二进制数中最小的,因此也被称为“最低位”。

  在数字信号处理中,MSB也常用于描述数据的精度。例如,一个16位的数字信号,它的最高有效位表示信号的符号位,而其余的15位表示信号的幅值,因此可以表示的最大绝对值为2的15次方。LSB也常用于描述数据的精度。例如,一个16位的数字信号,它的最低有效位表示信号的最小单位,其余的15位表示信号的幅值,因此可以表示的最小绝对值为2的负15次方。

  需要注意的是,在计算机和数字信号处理中,MSB和LSB的顺序取决于采用的字节顺序(Endianness)和位顺序(Bit ordering),在不同的系统和协议中可能存在不同的表示方式。

7.DMA传输

  DMA是“直接内存访问”的缩写,是一种高效的数据传输方式,可用于将数据从设备(如硬盘驱动器)传输到内存中,或将数据从内存传输到设备中,而无需CPU的干预。这种数据传输方式比使用CPU进行传输更快,因为DMA可以减少CPU的负载,让CPU有更多的时间来处理其他任务。

  在DMA传输中,DMA控制器会接管CPU的控制,它决定了数据的传输方式、传输的数据量以及数据的传输方向。CPU只需要设置DMA控制器的寄存器来指定数据传输的参数,然后就可以让DMA控制器自动完成数据传输。这种传输方式可以减少CPU的干预,从而提高系统的性能和效率。

  总之,DMA是一种高效的数据传输方式,可以减少CPU的干预,提高系统的性能和效率。它在许多设备和系统中被广泛使用,包括硬盘驱动器、网络接口卡、音频和视频设备等。

二、WAV 简介

  WAV 即 WAVE 文件,WAV 是计算机领域最常用的数字化声音文件格式之一,它是微软专门为 Windows 系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav"。它符合RIFF(Resource Interchange File Format)文件规范,用于保存 Windows 平台的音频信息资源,被Windows 平台及其应用程序所广泛支持,该格式也支持 MSADPCM,CCITT A LAW 等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的 WAV 文件和 CD 格式一样,也是 44.1K 的取样频率,16 位量化数字,因此在声音文件质量和 CD 相差无几!

  WAV 一般采用线性 PCM(脉冲编码调制)编码。WAV 文件是由若干个 Chunk 组成的。按照在文件中的出现位置包括:RIFF WAVE Chunk、Format Chunk、 Fact Chunk(可选)和 Data Chunk。每个 Chunk 由块标识符、数据大小和数据三部分组成,如下图所示:
在这里插入图片描述
  对于一个基本的 WAVE 文件而言,以下三种 Chunk 是必不可少的:文件中第一个 Chunk 是RIFF Chunk,然后是 FMT Chunk,最后是 Data Chunk。对于其他的 Chunk,顺序没有严格的限制。使用 WAVE 文件的应用程序必须具有读取以上三种 chunk 信息的能力,如果程序想要复制WAVE 文件,必须拷贝文件中所有的 chunk。

PCM只包含 3 个 Chunk,我们看一下它的文件构成,如图 55.1.2。
在这里插入图片描述
  不同的 Chunk 有不同的长度,编码文件时,按照 Chunk 的字节和位序排列好之后写入文件头,加上 wav 的后缀,就可以生成一个能被正确解析的 wav 文件了,对于 PCM 结构,我们只需要把获取到的音频数据填充到 Data Chunk 中即可。

  首先,我们来看看 RIFF 块(RIFF WAVE Chunk),该块以“RIFF”作为标示,紧跟 wav 文件大小(该大小是 wav 文件的总大小-8),然后数据段为“WAVE”,表示是 wav 文件。RIFF 块的 Chunk 结构如下:

typedef __PACKED_STRUCT
{
 uint32_t ChunkID; /* chunk id;这里固定为"RIFF",即 0X46464952 */
 uint32_t ChunkSize ; /* 集合大小;文件总大小-8 */
 uint32_t Format; /* 格式;WAVE,即 0X45564157 */
}ChunkRIFF; /* RIFF 块 */

  接着,我们看看 Format 块(Format Chunk),该块以“fmt”作为标示(注意有个空格!),一般情况下,该段的大小为 16 个字节,但是有些软件生成的 wav 格式,该部分可能有 18 个字节,含有 2 个字节的附加信息。Format 块的 Chunk 结构如下:

typedef __PACKED_STRUCT
{
 uint32_t ChunkID; /* chunk id;这里固定为"fmt ",即 0X20746D66 */
 uint32_t ChunkSize ; /* 子集合大小(不包括 ID 和 Size);这里为:20. */
 uint16_t AudioFormat; /* 音频格式;0X01,表示线性 PCM;0X11 表示 IMA ADPCM */
 uint16_t NumOfChannels; /* 通道数量;1,表示单声道;2,表示双声道; */
 uint32_t SampleRate; /* 采样率;0X1F40,表示 8Khz */
 uint32_t ByteRate; /* /字节速率; */
 uint16_t BlockAlign; /* 块对齐(字节); */
  uint16_t BitsPerSample; /* 单个采样数据大小;4 位 ADPCM,设置为 4 */
// uint16_t ByteExtraData; /* 附加的数据字节;2 个; 线性 PCM,没有这个参数 */
}ChunkFMT; /* fmt 块 */

  接下来,我们再看看 Fact 块(Fact Chunk),该块为可选块,以“fact”作为标示,不是每个 WAV 文件都有,在非 PCM 格式的文件中,一般会在Format 结构后面加入一个 Fact 块,该块 Chunk 结构如下:

typedef __PACKED_STRUCT 
{
 uint32_t ChunkID; /* chunk id;这里固定为"fact",即 0X74636166; */
 uint32_t ChunkSize; /* 子集合大小(不包括 ID 和 Size);这里为:4. */
 uint32_t NumOfSamples; /* 采样的数量; */
}ChunkFACT; /* fact 块 */

  DataFactSize 是这个 Chunk 中最重要的数据,如果这是某种压缩格式的声音文件,那么从这里就可以知道他解压缩后的大小。对于解压时的计算会有很大的好处!

  最后,我们来看看数据块(Data Chunk),该块是真正保存 wav 数据的地方,以“data”作为该 Chunk 的标示,然后是数据的大小。数据块的 Chunk 结构如下:

typedef __PACKED_STRUCT
{
 uint32_t ChunkID; /* chunk id;这里固定为"data",即 0X5453494C */
 uint32_t ChunkSize ; /* 子集合大小(不包括 ID 和 Size) */
}ChunkDATA; /* data 块 */

  ChunkSize 后紧接着就是 wav 数据。根据 Format Chunk 中的声道数以及采样 bit 数,wav 数据的 bit 位置可以分成如表 55.1.1.1 所示的几种形式:
在这里插入图片描述

三、I2S 简介

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频开发十六:SDL基础概念

SDL 纹理渲染 纹理 ​ 在SDL中,纹理是图像的描述信息。用SDL_Texture表示一个纹理对象(texture),它是一个用于存储像素数据的结构体类型。 渲染 ​ **互联网解释:**渲染是在电脑绘图中是指用软件从模型生成图像的…

【Linux】线程互斥详解:多线程会有什么问题?什么是互斥锁?C++怎么封装使用互斥锁?

多线程可以提高程序的并发性和运行效率,充分利用计算机的多核资源. 前面的几篇文章已经介绍了, Linux线程的基本概念、基本控制等内容. 我们已经看到了多线程可以提升运行效率等. 但是, 也发现了问题, 多线程可能会导致输出混乱、访问共享资源混乱、竞争等问题. 输…

Vue中 import ...与import{ }、import from ‘@路径‘ 与 import from ‘../路径‘

遇到的问题: 不带{ }以组件方式 引入后,用 组件名. 变量 的方式一直提示变量未定义的问题,改成直接 带{ }引入变量直接使用变量就不提示错误了,(不知道是不是我引入的包和他人不一样的原因...)&#xff0…

至尊宝工具箱 - 电商运营选品必备工具下载安装详细教程

简介 至尊宝插件是一款电商网络浏览插件,能够帮助店主更好地运营自己的网店,这款插件功能十分全面强大,可以实现搜主图、快速商家商品、优化商品标题等,通过帮助店家增加曝光量来增效销售,感兴趣的朋友快来体验。 下…

使用Superlink控制物联网网关远程调试PLC示例(PLC/HMI调试工具)

目录 1.Superlink工具使用说明 1.1软件安装 1.2账号登录 1.3设备查看 1.4菜单栏使用 2. Superlink网关远程调试网口/串口设备示例 2.1 远程调试西门子网口1200 PLC示例 2.2 远程调试欧姆龙232 PLC实串口通讯示例 3. 常见使用问题及技术支持 3.1 Superlink工具使用问题…

Mybatis核心

文章目录前言一、Configuration二、MappedStatement三、SqlSession四、Executor五、StatementHandler六、ParameterHandler七、ResultSetHandler八、TypeHandler总结前言 SqlSession是MyBatis提供的面向用户的操作数据库API。那么MyBatis底层是如何工作的呢?为了解…

vue.js表情文本输入框组件

文章目录参考链接效果图代码emoji.jsonEmojiText.vue使用参考链接 JS操作文本域获取光标/指定位置插入 vue.js支持表情输入 ttkwsd博客 效果图 代码 不能换行的bug已处理… emoji.json 表情图片放在public的emoji文件夹下面 emoji.json放在src/components/EmojiText文件夹…

Linux 生成pem文件 用于免密登录

1.在远程机器生成.pem文件 生成密钥对: $ ssh-keygen -t rsa -b 2048 -v 直接确认下一步 查看生成的密钥对: $ ls ~/.ssh/ 将私钥重命名至id_rsa.pem: $ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.pem 修改~/.ssh/目录权限: $ chmod …

力扣sql中等篇练习(三)

力扣sql中等篇练习(三) 1 树节点 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # not in匹配上了返回的值是1,casw when里面也是可以使用not in和子查询的 # 注意去重的时候需要筛选掉null值 SELECT id,case when p_id is null then Rootwhen (id …

暄桐好作业之《临王蒙〈具区林屋图〉》

告诉大家一个好消息“暄桐好作业”栏目上新啦~除了与大家分享正在进行的课程好作业,还会向大家展示来自暄桐学长学姐们的优秀国画作品。希望正在上课的暄桐同学们能够从学长学姐的分享以及暄桐教室专业助教的点评中,从中获益并获得力量,继续努…

Java基础(十七):日期时间API

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(五):流程控制语句 Java基础(六)&#xff1…

chatGPT开发公司

OpenAI是chatGPT的开发公司,成立于2015年,总部位于美国旧金山。OpenAI致力于开发和推广人工智能技术,包括自然语言处理、视觉识别、机器学习等领域,旨在推动人工智能技术对全球社会和经济的影响和发展。 除了chatGPT之外&…

日撸 Java 三百行day31

文章目录day31 整数矩阵及其运算面向对象思想java异常处理java中的getter和setter方法代码day31 整数矩阵及其运算 面向对象思想 结合之前day7和day8面向过程开发,只关注了矩阵加法和矩阵乘法的功能。而day31是面向对象开发,一个矩阵类,在这…

Python实现驾考自动答题,隔壁老王每次都100分....

人生苦短,我用python 不知道大家都考完驾照没? 这个驾照不管大家有没有,我相信大家都是这个: 朋友最近在考驾照,快考科一了… 我微微一笑当场给他整个活~ 用Python整了几十行代码,给朋友实现一下自动答…

前端面试题 - 基础(HTML、HTTP、WEB)

文章目录1、前端 SEO 需要注意哪些2、img 标签上的 title 和 alt 区别3、浏览器输入 url 到显示过程4、浏览器渲染过程5、常见请求方式6、常见的状态码7、网站性能优化8、语义化理解9、浏览器内核理解10、H5的新特性11、离线存储使用,工作原理12、浏览器是如何管理和…

确保实时操作系统(RTOS)设备中的数据安全

导读1月28日大家庆祝了数据保护日,这是一项旨在促进保护数据隐私和安全的国际活动。为了提高人们对数据保护的意识,讨论实时操作系统中数据安全的问题势在必行。目前非常规操作系统已被广泛使用,所以了解这一系统非常重要,尤其是涉…

做完自动化测试,但别让不会汇报毁了你...

pytest 是一个成熟的全功能Python测试工具,可以帮助您编写更好的程序。它与 python 自带的 unittest 测试框架类似,但 pytest 使用起来更简洁和高效,并且兼容 unittest 框架。pytest 能够支持简单的单元测试和复杂的功能测试,pyte…

Javassist动态生成类使用,以及Arthas 查看动态代理生成类内容

java反射 反射的弊端: 性能开销: 因为反射涉及到动态解析的类型,所以某些Java虚拟机的优化不能被执行(因为它不能真正了解你在做什么)。因此,反射操作的性能比非反射操作的性能要慢,应该避免在对性能敏感的应用程序中频繁调用的代码部分。 …

C++记录总结及面试常见问题

C记录总结及面试常见问题指针和函数内存分区模型访问权限struct & class创建类构造函数静态成员this指针const 修饰成员函数友元friend重载运算符和重载函数继承读文件ifstream/fstreamvector中resize和reserve的区别智能指针左值与右值struct、class区别引用指针和函数 函…

Zabbix6.0升级到Zabbix6.4

1:现在的版本是6.0.3 2:停止Zabbix Server进程。 systemctl stop zabbix-server 若升级Zabbix proxy版本,需也停止Zabbix proxy服务 。 systemctl stop zabbix-proxy 3:我用的是MariaDB数据库名称是zabbix。 4: 查看…