Linux音频-基本概念

news2024/9/25 13:15:44

文章目录

  • 机器声音的采集原理
  • 机器声音的播放原理
  • 音频相关基本概念
  • 计算机采集音频的模型
  • Linux系统音频框架
  • Linux音频框架的三类角色

Linux音频框架参考文章:Linux音频框架

机器声音的采集原理

声音是一种连续的信号,故其是一种模拟量。
录音设备可以捕获声音这种连续的信号,转化成相应的模拟量。
我们若要存储下声音,就要保存这些模拟量,但是通常我们会把这些模拟量转化成离散的数字信号,然后再保存下来。

模拟量转化成数字量的过程有个专业的名称:ADC(analog convert to digital)
百度上,ADC是模拟数字转换器(英语:Analog-to-digital converter)

机器声音的播放原理

捕获的声音用离散的数字量表示后,若我们播放这些声音,那么我们需要把这些数字量转化为模拟量后,我们就能听到这些声音了。

这个过程就是CDA,数字信号转模拟信号。

音频相关基本概念

在大致了解音频的采集和播放的原理后,这里了解一下音频相关的参数含义以及一些基本概念。

  • 样本长度(sample):
    一次采样得到的数据叫做样本,样本是记录音频数据最基本的单位,其长度常见的有8位,16位,24位,32位。
    如下图,下面使用16位的样本长度来记录声音的波形。可以推测得到,若样本长度越大,采集的声音波形也准确。
    在这里插入图片描述

  • 通道数(channel):
    就是声道数,该参数为1表示单声道,2则是立体声。

  • 桢(frame):
    桢记录了一个声音单元,其长度为样本长度与通道数的乘积。

  • 采样率(rate):
    钟采样的次数,该次数是针对而言。

  • 周期(period):
    音频设备一次处理所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。

  • 交错模式(interleaved):
    是一种音频数据的记录方式,在交错模式下,数据以连续桢的形式存放,即首先记录完桢1的左声道样本和右声道样本(假设为立体声格式),再开始桢2的记录。而在非交错模式下,首先记录的是一个周期内所有桢的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,我们只需要使用交错模式就可以了。

计算机采集音频的模型

音频采集主要有三者:①音频输出及捕获设备,②codec编解码设备,③MCU带音频数据接口的单片机。如下图所示。img

①音频输出及捕获设备:扬声器、麦克风
扬声器负责根据输入的模拟量数据播放声音。
麦克风负责把声音转化成模拟量并输出。

②MCU:带音频数据接口的片上系统芯片(SOC)
platform可以理解成 带有 音频数据传输接口的 单片机。
platform可以输入和输出音频数字信号

③codec:数字信号模拟信号编解码器
codec有以下两个功能:
1.把platform通过音频数据传输接口输出的数字信号转化成模拟信号,传输给扬声器。
2.把麦克风的模拟信号转化成数字信号,通过音频数据传输接口传输给platform

Linux系统音频框架

Linux中使用的音频框架是ASOC(ALSA System on Chip)

ASOC的出现就是为了解决ALSA无法解决的问题。ALSA到底存在什么问题? 以及ASOC会以怎样的方式去解决ALSA存在的问题?

详细参考内核文档: kernel\documentation\sound\alsa\soc\Overview.txt

ALSA存在的问题:

  1. Codec驱动与SOC中断CPU耦合严重,这将导致代码重复,一个Codec驱动每个cpu上会出现不同的版本。

  2. 当音频事件发生时(插拔耳机,音箱)没有标准的方法通知用户,尤其在移动端此事件非常常见。

  3. 当播放/录制音频时,驱动会让整个codec处于上电状态,这样会在移动端非常浪费电量。同时也不支持改变采样频率/配置电流来节约功耗。

针对以上问题,提出了ASOC(ALSA System on Chip)来力争解决上述问题。解决方法如下:

  1. Codec代码独立,不再耦合与CPU,这样可以增加Codec代码重复利用。

  2. 在Codec和Soc之间通过简单的I2S/PCM音频接口通信,这样SOC和Codec只需要注册自己相关的接口到ASOC code即可。

  3. 动态的电源管理(Dynamic Audio Power Management)DAPM。DAPM始终将Codec自动设置在最低功耗状态运行。

  4. 消除pop音。控制各个widget上下电的顺序消除pop音。

  5. 添加平台相关的控制,运行平台添加控制设备到声卡。

Linux音频框架的三类角色

ASOC音频架构为了实现上述的新feature,ASOC将嵌入式音频系统分为三大类可重复使用的驱动程序: Platform, Machine, Codec。

Codec类: Codec即编解码芯片的驱动,此Codec驱动是和平台无关,包含的功能有: 音频的控制接口,音频读写IO接口,以及DAPM的定义等。如果需要的话,此Codec类可以在BT,FM,MODEM模块中不做修改的使用。因此Codec就是一个可重复使用的模块,同一个Codec在不同的SOC中可以使用。

Platform类: 可以理解为某款SOC平台,平台驱动中包括音频DMA引擎驱动数字接口驱动(I2S, AC97, PCM)以及该平台相关的任何音频DSP驱动。同样此Platform也可以重用,在不同的Machine中可以直接重复使用。

Machine类: Machine可以理解为是一个桥梁,用于在Codec和Platform之间建立联系。此Machine指定了该机器使用那个Platform,那个Codec,最终会通过Machine建立两者之间的联系。

在软件上可以抽象如下图:
在这里插入图片描述
ASOC数据结构
在分析整个ASOC的过程中,出现了众多的数据结构,在此先理清重要的数据结构的关系。如下图:
在这里插入图片描述
可以看到Machine是连接Codec和Platform之间的桥梁,因此首先要分析Machine部分,在下节分析Machine部分。

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

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

相关文章

ubuntu安装配置mantis

目录 前言安装Apache2安装PHP安装数据库mariadbmariadb安装MariaDB重置密码为MantisBT创建数据库和用户 phpmyadmin安装和配置安装phpmyadmin查看安装内容配置phpmyadmin1.phpmyadmin apache配置文件2.为phpmyadmin创建数据库和用户3.修改配置文件config-db.php4.重新运行 管理…

【python海洋专题二十九】读取CTD文件数据并画单点温度剖面图

往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Python海洋专题四】之水深地图图像修饰 【Python海洋专题五】之水深地形图海岸填充 【Pytho…

智能振弦传感器的读取工具——振弦采集仪

智能振弦传感器的读取工具——振弦采集仪 为了解决振弦传感器间接测量物理量时繁琐的问题,我们结合微处理器和振弦传感器信号电路,开发出了智能振弦模块。该模块具有通信、信息存储、温度测量和传感器信号传递等功能,可以嵌入传统振弦传感器…

asp.net急救资源管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 急救资源管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c# 语言开发 asp.net急救资源管理信息系统…

微信小程序开发-01-入门

文章目录 一、微信开发者工具介绍基础文件介绍具体文件介绍JSON配置文件的作用wxmlwxssjs 二、宿主环境介绍通信模型运行机制组件视图容器基础内容其他常用组件 API 三、操作流程基本操作流程新建小程序页面 修改项目首页后续 四、协同工作和发布权限管理需求项目成员的组织结构…

Go语言入门心法(十四): Go操作Redis实战

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 Go语言入门心法(六): HTTP面向客户端|服务端编程 Go语言入门心法(七): 并发与通道 Go语言入门心法(八): mysql驱动安装报错o…

成都瀚网科技有限公司抖音小店:创新营销引领电商潮流

在当今数字化时代,抖音作为一款备受欢迎的短视频平台,不仅吸引了大量用户的关注,还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一,凭借其独特的营销策略和优质的产品,成为了抖音电商领…

编写竞赛程序

目录 程序设计 程序分析 系列文章 竞赛规则(Competitive Rules)包括启动(Start)、加速(speedup)、转弯(turn)、犯规(foul)。参与竞赛可能涉及的有汽车(car)、摩托车(motorbike)、自行车(bike)、马(horse)、摩托艇(motorboat)。 程序设计 Competition…

vue2.x封装svg组件并使用

第一步&#xff1a;安装svg-sprite-loader插件 <!-- svg-sprite-loader svg雪碧图 转换工具 --> <!-- <symbol> 元素中的 path 就是绘制图标的路径&#xff0c;这种一大串的东西我们肯定没办法手动的去处理&#xff0c; 那么就需要用到插件 svg-sprite-loader …

安装elasticsearch,kibana

大家好, 我是苏麟 , 今天来安装es , kibana . 部署单点es 创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 镜像 我们用docker命令拉取和长传都可以选一种就可以 . 拉取…

内网windows实现同步时钟

windows系统可通过联网自动校准系统时间&#xff0c;如果是公网连接的内网环境主机可通过以下方式实现 1. 配置时间服务器 &#xff08;本案例环境为windows server 2019&#xff0c;ip:192.168.0.1&#xff09; 修改注册表 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\serv…

如何在两个月内学会Python编程?——最佳学习计划指南

Python编程已经成为互联网时代最重要的技能之一&#xff0c;不仅对编程新手&#xff0c;对于从事数据科学、网站开发和自动化任务的专业人士也是必备的技能。你是否想要学习Python编程&#xff0c;但不知道如何安排时间和方法&#xff1f;你是否担心学习过程太长、太枯燥、太难…

VR酒店专业情景教学演示

VR酒店情景教学为学生带来的全新学习体验。在这个虚拟环境中&#xff0c;学生可以亲身经历各种酒店管理场景&#xff0c;从客房清洁、餐厅服务&#xff0c;到客人接待、突发事件处理&#xff0c;都能得到生动的模拟和实践。 客房清洁是酒店管理中最基础却也最重要的一环。通过V…

自编efi文件测试vmware虚拟机如何进入UEFI环境

同事突然让帮忙编一下UEFI&#xff0c;之前完全没有接触过&#xff0c;在此粗鲁记录其过程。 UEFI的开源框架是edk2&#xff0c;开发环境配置起来还是有些麻烦&#xff0c;完全按照文档编译不过&#xff0c;经人帮助总算编译通过&#xff0c;但如何测试又是问题&#xff1b;网…

设计模式:装饰器模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《桥接模式》 下一篇《迭代器模式》 简介&#xff1a; 装饰器模式&#xff0c;它是一种结构型模式&#xff0c;它通过将一个对象封装在一个装饰器对象中&#xff0c;使得你可以通过改变装饰器对象来改变…

layui移除(删除)table表格的一行

表格里添加删除按钮&#xff1a; , {field: wealth, width: 150, title: 操作, align: center, fixed: right,templet: function (item) {return <a style"margin:0px 5px; color:red; cursor: pointer;" lay-event"delete" id"DeleteTr" >…

c++找工作现状是怎样的?

c找工作现状是怎样的&#xff1f; 因为发现最近的就业市场c加加的工作岗位多&#xff0c;Java的工作岗位少了&#xff0c;所以就连某些Java培训机构今 年也纷纷开设了c加加嵌入式开发培训专业。 最近很多小伙伴找我&#xff0c;说想要一些C资料&#xff0c;然后我根据自己从业…

【JAVA核心知识】深度了解MySql的innodb引擎

关键词InnoDB架构图表空间数据页顺序下数据页的存储页分裂页合并高水位排序索引构建img_v2_455d98d3-a67a-47ef-b15a-c1798de6f56g.jpg 索引优化模糊查询打断最左匹配&#xff1f;-索引下推仅能使用一个索引&#xff1f;-索引合并自适应Hash索引 AUTO_INCREMENT计数器新增语句的…

GOPS·2023上海站 | 提前剧透!阿里、腾讯、字节、擎创等专家齐聚上海,共话互联网运维

一、前言 2023年10月26日-27日&#xff0c;第二十一届 GOPS 全球运维大会 2023 上海站即将举行。作为年终前最后一场面向 IT 技术从业者的高端运维盛会。大会上&#xff0c;来自腾讯、阿里、字节跳动、抖音、美团、擎创科技等明星专家&#xff0c;将带来十大互联网行业精彩主…

混淆技术研究笔记(八)扩展yGuard实现签名

前面铺垫了这么多&#xff0c;终于开始实现签名反篡改的功能了。 下载 yGuard 源码&#xff08;https://github.com/yWorks/yGuard&#xff09;&#xff0c;然后先修改一处错误&#xff0c;在 settings.gradle 中定义的项目名是错的&#xff08;和github上的名字不一样&#x…