音频模块的介绍

2023-11-07

一、术语总结

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 所示的几种形式:
在这里插入图片描述

三、知识总结

1.SAI主从模式
  工作在主模式的 SAI子模块循环发送数据 0X0000,给 ES8388,以产生 LRCK、SCLK 和 MCLK 等信号,工作在从模式的 SAI 子模块,则接收来自 ES8388 的 ADC 数据(ASDOUT),并保存到 TF 卡,实现录音。

四、代码分析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

音频模块的介绍 的相关文章

随机推荐

  • 某多多,自动化测试之 Selenium 登录被检测,请使用开发者开放平台

    网络潮流之下 请正确使用自己的技术 技术无罪 请善用手中的技术 创造更美好的明天 请勿用于不道德 违法行为 原文title 移除Selenium中的 window navigator webdriver 原文链接 https www cnb
  • Python:计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数

    每日一题 文章目录 一 输入描述 二 输出描述 1 具体代码 2 格式化函数 题目 老师给学生们组织了一场考试 卷面总分为 100 分 每个学生的得分都是一个 0 到 100 的整数 如果得分至少是 60 分 则称为及格 如果得分至少为 8
  • 每日学术速递5.27

    CV 计算机视觉 ML 机器学习 RL 强化学习 NLP 自然语言处理 Subjects cs CV 1 Control A Video Controllable Text to Video Generation with Diffusio
  • 【批处理DOS-CMD命令-汇总和小结】-注册表编辑命令reg,如何用cmd命令打开注册表编辑器regedit

    一 打开注册表编辑器 1 1 在运行窗口中打开 首先用 win r 打开运行窗口 然后执行 regedit 打开注册表编辑器 1 2 在cmd窗口中打开 在cmd窗口中执行命令 regedit 也可打开 二 注册表编辑命令 2 1 查询re
  • 虚拟机iis服务器搭建过程,手把手教你配置一台Linux虚拟机

    手把手教你配置一台Linux虚拟机 前言 Linux distribution 越来越多 也越来越成熟 所以安装起来也是比较简单 但是要理解安装的每一个步骤还是需要对Linux的基础知识有一定的了解 不过不用很深入 如果很深入我也不会 这里
  • springboot单元测试问题解决 (空指针异常:NullPointerException 或者注入问题)

    在对springboot进行单元测试时 遇到了空指针异常 一般来说加一个注解就可以了 SpringBootTest classes xxApplication class 如果还遇到问题 可以考虑加 RunWith SpringJUnit4
  • ceph环境清理

    第一步 在 root ceph 目录下执行 第一个节点 ceph deploy purge ceph01 ceph02 ceph03 ceph04 ceph deploy purgedata ceph01 ceph02 ceph03 cep
  • python基础编程:python如何实现浪漫的烟花秀(附代码)

    不废话 直接上代码 import turtle screen turtle Screen pen turtle Turtle pen pensize 3 pen speed 10 screen bgcolor black def firew
  • Hyper-V-虚拟机一直显示 启动中 该怎么办呢?

    今天开着虚机 结果过了出去了一会儿 回来发现虚机自己停了 停了就停了 我再开一下呗 结果一直显示启动中 我q 等了半天不见动静 重启也不好用 怎么办呢 有一种方法 叫直接杀线程 1 用下面命令看一下那个服务正在开启 tasklist FI
  • maven安装教程(超详细图解)

    本篇超级详细案例图解教学 Maven安装教程 图片点击可放大仔细看 Maven安装教程 1 前提 Maven需要Java环境 所以首先需要安装JDK 本教程默认已安装JDK1 8 2 解压文件 将maven文件夹复制到磁盘目录 本教程以安装
  • JackSon

    前后端分离开发中常用到的数据交互方式就是json 本文主要讲解对jackson对json的相关操作 jackson 基础篇 1 引入依赖
  • 《Apache MINA 2.0 用户指南》第七章:事件处理器

    最近准备将Apache MINA 2 0 用户指南英文文档翻译给大家 但是我偶然一次百度 发现 Defonds 这位大牛已经翻译大部分文档 原文链接 http mina apache org mina project userguide c
  • [webpack问题]TypeError: __webpack_require__(...).context is not a function

    require context directory useSubdirectories regExp directory 表示检索的目录 useSubdirectories 表示是否检索子文件夹 regExp 匹配文件的正则表达式 一般是文
  • BeanCreationException异常,注入Bean异常

    org springframework beans factory BeanCreationException Error creating bean with name XXX 注入bean异常 出现这个异常就是找不到对应的JavaBea
  • mac改成类似微软键盘偏好设置

    以前我做过笔记 但是好像印象还不是很深刻 因为我自己还是忘记了 我又写了一篇 首先是蛋疼的切换输入法问题 中文输入法和英文输入法的问题真不习惯 切换输入法改正方法 进入系统偏好设置 键盘 快捷键 输入法 选择上一个输入法 勾选 发现右边 空
  • Java类和对象(重点详解)

    类和对象 类和对象的关系 类的介绍 类变量 静态变量 public private 一些建议和小结 写在最后的话 这段时间博主学习了一些Java中类和对象的知识 今天我们就来聊聊Java中的类和对象 类和对象的关系 类其实就是一个模板 比如
  • oracle重复数据保留需要的一条数据

    由于功能开发进度的问题 人员录入的时候仅能够多次录入 不能够录入之后直接以该数据未蓝本引入导致多部门的时候必须多次创建冗余的数据 且由于数据录入的不规范 录入了许多相同的数据 特别是同单位同部门的数据 故需要处理此类数据 因此需要对此类重复
  • Unity --- 文本输入框的使用

    文本输入框有两个版本 一个是旧版的文本输入框 一个是新版的输入字段 这里选择旧版 其实旧版和新版的唯一区别就是text组件有些不同 其它的没啥不同 上面这两张图就是文本输入框中最重要的 input field 输入区域 组件的参数了 上面这
  • leetcode报错:member access within null pointer of type 'struct ListNode'

    背景 在编写判断单链表是否有环时 出现这错误 错误出现原因 错误出现原因 color Red text 38169 35823 20986 29616 21407 22240 因为试图使用空指针 解决方法 解决方法 color Red te
  • 音频模块的介绍

    一 术语总结 1 HIFI 级 HIFI 一词通常指高保真音频 High Fidelity Audio 是指尽可能保持音频信号的原始质量 让听众感受到最真实的音乐表现 因此 HIFI级 通常指具有高保真音频性能的产品或设备 例如高保真耳机