做网站电话沧州/2345浏览器下载

做网站电话沧州,2345浏览器下载,政府网站建设须知,营销怎么做这些先引出一个内容,是 Linux 内核的音频系统,ALSA,提供了对声卡的低级访问,支持 PCM,播放/录音、混音、MIDI 处理等功能。它取代了旧的 OSS,并提供更强大的功能和更好的硬件支持。 ALSA 主要特点&#xf…

这些先引出一个内容,是 Linux 内核的音频系统,ALSA,提供了对声卡的低级访问,支持 PCM,播放/录音、混音、MIDI 处理等功能。它取代了旧的 OSS,并提供更强大的功能和更好的硬件支持。

ALSA 主要特点,驱动层:直接与硬件交互,支持多种声卡,用户空间库(libasound):提供更高级的 API,便于应用程序开发。多设备支持:支持多个音频流同时播放(混音)。MIDI 支持:处理 MIDI 设备和数据。

竟然说到了就顺便说一下常用 ALSA 命令。

查看声卡信息

aplay -l   # 列出所有可用的 PCM 播放设备
arecord -l # 列出所有可用的录音设备

播放音频文件

aplay example.wav  # 播放 WAV 文件

录音

arecord -D plughw:0,0 -f cd -t wav -d 10 test.wav  # 录制 10 秒音频

控制音量

alsamixer  # 打开交互式音量控制界面
amixer sset 'Master' 50%  # 设置主音量为 50%

到此就点一下ALSA的内容,更多内容得后续找机会继续分享了。

接着就是结合目前市面上的实际调研的结果如下为音频内容的技术栈。

硬件层就是下述内容了

音频编解码芯片(Codec):如SGTL5000、WM8960,通过I2S或AC97接口与主控连接。

接口协议:I2S(音频数据传输)、PCM(脉冲编码调制)、I2C(控制Codec参数)。

麦克风/扬声器:模拟或数字信号输入输出。

驱动层为下述内容

ALSA(Advanced Linux Sound Architecture):

Platform Driver:驱动 I2S 接口,管理音频数据的传输。

Codec Driver:负责控制音频 Codec 芯片,调节音量、增益等。

Machine Driver:连接 Platform Driver 和 Codec Driver,定义音频路径。

内核驱动:snd_soc_*系列驱动(如snd_soc_wm8960)。

用户空间库:alsa-lib(提供API如snd_pcm_open())。

调试工具:alsa-utilsaplayarecordamixer)。

中间件就是如下内容

GStreamer:通过插件(如alsasrc/alsasink)处理音频流。

PulseAudio:适合复杂场景(混音、蓝牙音频),但嵌入式场景可能因资源限制改用ALSA直接操作。

小型库:libao(音频输出抽象)、libmad(MP3解码)。

至此,对于音频方面前提知识点支撑的内容就结束了,接下来就是实际的开发过程了。


针对WM8960,为何需要音频编解码芯片?

处理器要想“听到”外界的声音必须要把外界的声音转化为自己能够理解的“语言”,处理 器能理解的就是 0 和 1,也就是二进制数据。所以我们需要先把外界的声音转换为处理器能理 解的 0 和 1,在信号处理领域,外界的声音是模拟信号,处理器能理解的是数字信号,因此这 里就涉及到一个模拟信号转换为数字信号的过程,而完成这个功能的就是 ADC 芯片。

ADC Analog-to-Digital Converter DAC Digital-to-Analog Converter

同理,如果处理器要向外界传达自己的“心声”,也就是放音,那么就涉及到将处理器能理解的 0 和 1 转化为外界能理解的连续变化的声音,这个过程就是将数字信号转化为模拟信号, 而完成这个功能的是 DAC 芯片。

现在我们知道了,处理器如果既想“听到”外界的声音,又想向外界传达自己的“心声”, 那么就需要同时用到 DAC 和 ADC 这两款芯片。那是不是买两颗 DAC 和 ADC 芯片就行了呢? 答案肯定是可以的,但是音频不单单是能出声、能听到就行。我们往往需要听到的声音动听、 录进去的语音贴近真实、可以调节音效、对声音能够进行一些处理(需要 DSP 单元)、拥有统一 的标准接口,方便开发等等。将这些针对声音的各种要求全部叠加到 DAC 和 ADC 芯片上,那 么就会得到一个专门用于音频的芯片,也就是音频编解码芯片,英文名字就是 Audio CODEC, 所以我们在手机或者电脑的介绍中看到“CODEC”这个词语,一般说的都是音频编解码。

既然音频 CODEC 的本质是 ADC 和 DAC,那么采样率和采样位数就是衡量一款音频 CODEC 最重要的指标。比如常见音频采样率有 8K、44.1K、48K、192K 甚至 384K 和 768K, 采样位数常见的有 8 位、16 位、24 位、32 位。采样率和采样位数越高,那么音频 CODEC 越能真实的还原声音,也就是大家说的 HIFI。因此大家会看到高端的音频播放器都会有很高的采 样率和采样位数,同样的价格也会越高。当然了,实际的效果还与其他部分有关,采样率和采样位数只是其中重要的指标之一。

WM8960 是 低功耗、高性能的音频编解码芯片(Audio Codec),由 Wolfson Microelectronics(现已被 Cirrus Logic 收购)设计,广泛应用于嵌入式系统、便携设备(如智能音箱、平板电脑)、工业控制等领域。(更多理论知识就懒得说了 还是直接在应用层面上来看吧)

输入:

支持 麦克风输入(单端/差分,集成可编程前置放大器)。

线路输入(Line In):可直接连接外部音频信号源(如MP3播放器)。

输出:

耳机输出(驱动能力高达 40mW,可直接驱动 16Ω 耳机)。

线路输出(Line Out):用于连接功放或扬声器。

支持 I2S、PCM、左对齐/右对齐 格式,与主控芯片(如ARM SoC)通过 I2S总线 传输音频数据。

可通过 I2C 或 SPI 配置内部寄存器(如音量、增益、滤波器)。

WM8960 整体框图

 ①、此部分是 WM8960 提供的输入接口,作为立体声音频输入源,一共提供了三路,分别 为 LINPUT1/RINPUT1、LINPUT2/RINPUT2、LINPUT3/RINPUT3。麦克风或线路输入就连接到 此接口上,这部分是需要硬件工程师重点关心的,因为音频选择从哪一路进入需要在画 PCB 的 时候就应该定好。

②、此部分是 WM8960 的输出接口,比如输出给耳机或喇叭,SPK_LP/SPK_LN 用于连接 左声道的喇叭,支持 1W 的 8Ω喇叭。SPK_RP/SPK_RN 用于连接右声道的喇叭,同样支持 1W 的 8Ω喇叭,最后就是 HP_L/HP_R,用于连接耳机。

③、此部分是数字音频接口,用于和主控制器连接,有 5 根线,用于主控制器和 WM8960 之间进行数据“沟通”。主控制器向 WM8960 的 DAC 发送的数据,WM8960 的 ADC 向主控制 传递的数据都是通过此音频接口来完成的。这个接口非常重要,是我们驱动开发人员重点关注 的,此接口支持 I2S 格式。此接口 5 根线的作用如下:

ADCDAT:ADC 数据输出引脚,采集到的音频数据转换为数字信号以后通过此引脚传输给 主控制器。

ADCLRC:ADC 数据对齐时钟,也就是帧时钟(LRCK),用于切换左右声道数据,此信号 的频率就是采样率。此引脚可以配置为 GPIO 功能,配置为 GPIO 以后 ADC 就会使用 DACLRC 引脚作为帧时钟。

DACDAT:DAC 数据输入引脚,主控器通过此引脚将数字信号输入给 WM8960 的 DAC。 DACLRC:DAC 数据对齐时钟,功能和 ADCLRC 一样,都是帧时钟(LRCK),用于切换左 右声道数据,此信号的频率等于采样率。

BCLK:位时钟,用于同步。 MCLK:主时钟,WM8960 工作的时候还需要一路主时钟,此时钟由 I.MX6ULL 提供,

MCLK 频率等于采样率的 256 或 384 倍,因此大家在 WM8960 的数据手册里面常看到 MCLK=256fs 或 MCLK=384fs。

④、此部分为控制接口,是一个标准的 I2C 接口,WM8960 要想工作必须对其进行配置, 这个 I2C 接口就是用于配置 WM8960 的。


I2S 总线接口

SCK:串行时钟信号,也叫做位时钟(BCLK),音频数据的每一位数据都对应一个 SCK,立 体声都是双声道的,因此 SCK=2×采样率×采样位数。比如采样率为 44.1KHz、16 位的立体声 音频,那么 SCK=2×44100×16=1411200Hz=1.4112MHz。

WS:字段(声道)选择信号,也叫做 LRCK,也叫做帧时钟,用于切换左右声道数据,WS 为 “1”表示正在传输左声道的数据,WS 为“0”表示正在传输右声道的数据。WS 的频率等于采 样率,比如采样率为 44.1KHz 的音频,WS=44.1KHz。

SD:串行数据信号,也就是我们实际的音频数据,如果要同时实现放音和录音,那么就需 要 2 根数据线,比如 WM8960 的 ADCDAT 和 DACDAT,就是分别用于录音和放音。不管音频 数据是多少位的,数据的最高位都是最先传输的。数据的最高位总是出现在一帧开始后(LRCK 变化)的第 2 个 SCK 脉冲处。

另外,有时候为了使音频 CODEC 芯片与主控制器之间能够更好的同步,会引入另外一个 叫做 MCLK 的信号,也叫做主时钟或系统时钟,一般是采样率的 256 倍或 384 倍。

就是一帧立体声音频时序图:

                                                        图 65.1.3.1 I2S 时序图

                   图 65.1.3.2 就是笔者采用逻辑分析仪抓取到的一帧真实的音频时序图:

在统一的 I2S 接口下,出现了不同的数据格式,根据 DATA 数据相 对于 LRCK 和 SCLK 位置的不同,出现了 Left Justified(左对齐)和 Right Justified(右对齐)两种格 式,这两种格式的时序图如图所示:

音频 CODEC 支持 I2S 协议,那么主控制器也必须支持 I2S 协议,大家如果学过 STM32F4/F7/H7 的话应该知道 SAI 接口,因为在 STM32 中就是通过 SAI 接口来连接音频 CODEC。全称为 Synchronous Audio Interface,翻译 过来就是同步音频接口。

I.MX6ULL 的 SAI 是一个全双工、支持帧同步的串行接口,支持 I2S、AC97、TDM 和音频 DSP,SAI 主要特性如下:

①、帧最大为 32 个字。

②、字大小可选择 8bit 或 32bit。

③、每个接收和发送通道拥有 32×32bit 的 FIFO。

④、FIFO 错误以后支持平滑重启。 I.MX6ULL 的 SAI 框图如下所示:

“SAI_TX”和“SAI_RX”开头的就是 SAI 外设提供给外部连接音频 CODEC 的信号线

 我们重点关注两个接口,SAI 和 I2C,我们依次来看一下这两个接口:

修改设备树

前面分析原理图的时候已经说过了,WM8960 与 I.MX6ULL 之间有两个通信接口:I2C 和 SAI,因此设备树中会涉及到 I2C 和 SAI 两个设备节点。其中 I2C 用于配置 WM8960,SAI 接 口用于音频数据传输,我们依次来配置一下这两个接口。

1、wm8960 i2c 接口设备树

如 果 去 添 加 肯 定 是 要 看 设 备 树 的 绑 定 手 册 , 打 开 Documentation/devicetree/bindings/sound/wm8960.txt,此文件仅仅用于描述如何在 I2C 节点下添 加 WM8960 相关信息,此文档适用于所有的主控,不局限于 I.MX6ULL。

有 2 个必要的属性:

compatible:兼容属性,属性值要设置为“wlf,wm8960”。所以大家在 linux 内核里面全局 搜索“wlf,wm8960”的话就会找到WM8960的I2C驱动文件,此文件为sound/soc/codecs/wm8960.c。

reg:设置 WM8960 的 I2C 地址, WM8960 的 I2C 地址为 0X1。

wlf,shared-lrclk:这是一个 bool 类型的属性,如果添加了此属性,WM8960 的 R24 寄存器 的 LRCM 位(bit2)就会置 1。当 LRCM 为 1 的时候只有当 ADC 和 DAC 全部关闭以后 ADCLRC 和 DACLRC 时钟才会关闭。
wlf,capless:这也是一个 bool 类型的属性,如果添加了此属性,OUT3 引脚将会使能,并且 为了响应耳机插入响应事件,HP_L 和 HP_R 这两个引脚都会关闭。

绑定文档给出的参考节点内容如下所示:

codec: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; wlf,shared-lrclk; 
}; 

根据 wm8960.txt 这份绑定文档我们就可以在任意一个主控的 I2C 节点下添加 wm8960 相关 信息了,NXP 官方 I.MX6ULL EVK 开发板使用的也是 WM8960,因此在设备树中添加设备节 点这些工作 NXP 已经帮我们做了。打开 imx6ull-alientek-emmc.dts,根据自己所使用的底板版本 号,找到名为“i2c2”或“i2c1”的节点,将如下 wm8960 节点信息添加到对应的 i2c 节点下:

1 codec: wm8960@1a { 
2 compatible = "wlf,wm8960"; 
3 reg = <0x1a>; 
4 clocks = <&clks IMX6UL_CLK_SAI2>; 
5 clock-names = "mclk"; 
6 wlf,shared-lrclk; 
7 }; 

可以看出,示例代码 65.3.1.2 中的内容基本和 wm8960.txt 这个绑定文档中的示例内容一致, 只是多了第 4 和第 5 这两行,这两行用于描述时钟相关信息。第 4 行指定时钟源为 SAI2,第 5 行指定时钟的名字为“mclk”。前面我们说过,为了更好的同步,一般都会额外提供一条 MCLK 时钟。

 

以后版本的底板添加到 I2C1 节点下

续。。

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

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

相关文章

OpenHarmony 开源鸿蒙北向开发——3.配置SDK

安装、配置完成之后我们就要配置SDK。 我们创建工程后&#xff0c;点击右上角设置 进入设置 进入OpenHarmony SDK&#xff0c;选择编辑 这里配置一下SDK安装位置 点击完成 这里我们API版本勾选第一个即可 确认安装 勾选接受 这里要等一会 安装完成后&#xff0c;点击完成

C#通过API接口返回流式响应内容---SignalR方式

1、背景 在上两篇《C#通过API接口返回流式响应内容—分块编码方式》和《C#通过API接口返回流式响应内容—SSE方式》实现了流式响应的内容。 上面的这两个主要是通过HTTP的一些功能&#xff0c;除了这些之外&#xff0c;还有WebSocket的方式。C#中的WebSocket的有比较多的方案&…

识别并脱敏上传到deepseek/chatgpt的文本文件中的身份证/手机号

本文将介绍一种简单高效的方法解决用户在上传文件到DeepSeek、ChatGPT,文心一言,AI等大语言模型平台过程中的身份证号以及手机号等敏感数据识别和脱敏问题。 DeepSeek、ChatGPT,Qwen,Claude等AI平台工具快速的被接受和使用,用户每天上传的文本数据中潜藏着大量敏感信息,…

第六:go 操作 redis-go

Redis 在项目开发中redis的使用也比较频繁&#xff0c;本文介绍了Go语言中go-redis库的基本使用。 Redis介绍 Redis是一个开源的内存数据库&#xff0c;Redis提供了多种不同类型的数据结构&#xff0c;很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外&am…

fastapi+angular外卖系统

说明&#xff1a; fastapiangular外卖系统 1.美食分类&#xff08;粥&#xff0c;粉&#xff0c;面&#xff0c;炸鸡&#xff0c;炒菜&#xff0c;西餐&#xff0c;奶茶等等&#xff09; 2.商家列表 &#xff08;kfc&#xff0c;兰州拉面&#xff0c;湘菜馆&#xff0c;早餐店…

NFS共享搭建

准备工作 首先确保已经建了两台虚拟机&#xff0c;都是桥接模式&#xff0c;一台是windows server 2019 一台是centos7 用户配额教程,是在windows server 2019中&#xff0c;先新建虚拟池&#xff0c;然后创建虚拟磁盘&#xff0c;记得添加磁盘类型要选择第三个&#xff0c;要不…

DFT mode下hard phy STA Nopath

hard Phy boundary No Path 1. shift mode; shift cornor出现No Path的; PHY SI SO在shift mode必须有timing的path; 展示为No constrained path; check step: report_timing -though NO constrained path set timing_report_unconstrained true report again you will…

【工作记录】F12查看接口信息及postman中使用

可参考 详细教程&#xff1a;如何从前端查看调用接口、传参及返回结果&#xff08;附带图片案例&#xff09;_f12查看接口及参数-CSDN博客 1、接口信息 接口基础知识2&#xff1a;http通信的组成_接口请求信息包括-CSDN博客 HTTP类型接口之请求&响应详解 - 三叔测试笔记…

《自然》:陆地蒸散量研究的统计失误被撤回-空间加权平均的计算方法

文章目录 前言一、空间加权平均的计算方法二、代码1.Python 实现2.MATLAB代码 前言 In this article, we calculated global land evapotranspiration for 2003 to 2019 using a mass-balance approach. To do this, we calculated evapotranspiration as the residual of the…

开源软件许可证冲突的原因和解决方法

1、什么是开源许可证以及许可证冲突产生的问题 开源软件许可证是一种法律文件&#xff0c;它规定了软件用户、分发者和修改者使用、复制、修改和分发开源软件的权利和义务。开源许可证是由软件的版权所有者&#xff08;通常是开发者或开发团队&#xff09;发布的&#xff0c;它…

【el-upload】el-upload组件 - list-type=“picture“ 时,文件预览展示优化

目录 问题图el-upload预览组件 PicturePreview效果展示 问题图 el-upload <el-uploadref"upload"multipledragaction"#":auto-upload"false":file-list"fileList"name"files":accept".png,.jpg,.jpeg,.JGP,.JPEG,.…

微前端 qiankun vite vue3

文章目录 简介主应用 qiankun-main vue3 vite子应用 qiankun-app-vue2 webpack5子应用 qiankun-react webpack5子应用 quankun-vue3 vite遇到的问题 简介 主要介绍以qiankun框架为基础&#xff0c;vite 搭建vue3 项目为主应用&#xff0c;wepack vue2 和 webpack react 搭建的…

C#从入门到精通(1)

目录 第一章 C#与VS介绍 第二章 第一个C#程序 &#xff08;1&#xff09;C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 &#xff08;2&#xff09;程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…

东隆科技携手PRIMES成立中国校准实验室,开启激光诊断高精度新时代

3月12日&#xff0c;上海慕尼黑光博会期间&#xff0c;东隆科技正式宣布与德国PRIMES共同成立“中国校准实验室”。这一重要合作标志着东隆科技在本地化服务领域的优势与PRIMES在激光光束诊断领域的顶尖技术深度融合&#xff0c;旨在为中国客户提供更快速、更高精度的服务以及本…

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

可观测性是一种通过分析系统输出结果并推断和衡量系统内部状态的能力。谈及可观测性一般包含几大功能&#xff1a;监控指标、链路追踪、告警日志&#xff0c;及 Continues Profiling 持续剖析能力。对于操作系统可观测&#xff0c;监控指标可以帮助查看各个子系统&#xff08;I…

网络安全设备配置与管理-实验4-防火墙AAA服务配置

实验4-p118防火墙AAA服务配置 从这个实验开始&#xff0c;每一个实验都是长篇大论&#x1f613; 不过有好兄弟会替我出手 注意&#xff1a;1. gns3.exe必须以管理员身份打开&#xff0c;否则ping不通虚拟机。 win10虚拟机无法做本次实验&#xff0c;必须用学校给的虚拟机。首…

路由Vue Router基本用法

路由的作用是根据URL来匹配对应的组件&#xff0c;并且无刷新切换模板的内容。vue.js中&#xff0c;可使用Vue Router来管理路由&#xff0c;让构建单页应用更加简单。 一、效果 二、实现 1.项目中安装Vue Router插件 pnpm install vue-routerlastest 2.main.js import { …

【Qt】Qt + Modbus 服务端学习笔记

《Qt Modbus 服务端学习笔记》 1.因为项目的需要&#xff0c;要写一个modbus通信&#xff0c;csdn上感觉有些回答&#xff0c;代码是人工智能生成的&#xff0c;有些细节不对。我这个经过实测&#xff0c;是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…

CherryStudio + 火山引擎DeepSeek R1 告别服务器繁忙

CherryStudio 火山引擎DeepSeek R1 告别服务器繁忙 一、下载CherryStudio并安装 CherryStudio是功能强大的多模型桌面客户端&#xff0c;支持Windows、macOS和Linux系统。集成了多种主流的大语言模型&#xff08;如OpenAI、DeepSeek、Gemini等&#xff09;以及本地模型运行功…

Unity TextMeshPro中显示建筑特殊符号

示例&#xff1a;显示效果如图 实现步骤 1、下载 SJQY 字体库 2、导入字体&#xff1a;将 SJQY 字体文件&#xff08;如 .ttf 或 .otf 文件&#xff09;导入到 Unity 项目的 Assets 文件夹中。 3、创建 TMP 字体资产 方法一 方法二 选择刚导入的字体文件&#xff0c;在…