云网站建设,昆明建网站电话,台州房产网站建设,网站地图定位怎么做文章目录 机器声音的采集原理机器声音的播放原理音频相关基本概念计算机采集音频的模型Linux系统音频框架Linux音频框架的三类角色 Linux音频框架参考文章#xff1a;Linux音频框架
机器声音的采集原理
声音是一种连续的信号#xff0c;故其是一种模拟量。 录音设备可以捕获… 文章目录 机器声音的采集原理机器声音的播放原理音频相关基本概念计算机采集音频的模型Linux系统音频框架Linux音频框架的三类角色 Linux音频框架参考文章Linux音频框架
机器声音的采集原理
声音是一种连续的信号故其是一种模拟量。 录音设备可以捕获声音这种连续的信号转化成相应的模拟量。 我们若要存储下声音就要保存这些模拟量但是通常我们会把这些模拟量转化成离散的数字信号然后再保存下来。
模拟量转化成数字量的过程有个专业的名称ADCanalog convert to digital 百度上ADC是模拟数字转换器英语Analog-to-digital converter
机器声音的播放原理
捕获的声音用离散的数字量表示后若我们播放这些声音那么我们需要把这些数字量转化为模拟量后我们就能听到这些声音了。
这个过程就是CDA数字信号转模拟信号。
音频相关基本概念
在大致了解音频的采集和播放的原理后这里了解一下音频相关的参数含义以及一些基本概念。 样本长度(sample) 一次采样得到的数据叫做样本样本是记录音频数据最基本的单位其长度常见的有8位16位24位32位。 如下图下面使用4位的样本长度来记录声音的波形。可以推测得到若样本长度越大采集的声音波形也准确。 通道数(channel) 就是声道数该参数为1表示单声道2则是立体声。 桢(frame) 桢记录了一个声音单元其长度为样本长度与通道数的乘积。 譬如对于样本长度为16bit的双声道来说一帧的大小等于16 * 2 / 8 4个字节。 采样率(rate) 每秒钟采样的次数该次数是针对桢而言。 周期(period) 音频设备一次处理所需要的桢数对于音频设备的数据访问以及音频数据的存储都是以此为单位。 譬如周期的大小为1024帧则表示音频设备进行一次读或写操作的数据量大小为1024帧假设一帧为4个字节那么也就是1024*44096个字节数据。 一个周期其实就是两次硬件中断之间的帧数音频设备每处理读或写完一个周期的数据就会产生一个中断所以两个中断之间相差一个周期 交错模式(interleaved) 是一种音频数据的记录方式在交错模式下数据以连续桢的形式存放即首先记录完桢1的左声道样本和右声道样本假设为立体声格式再开始桢2的记录。而在非交错模式下首先记录的是一个周期内所有桢的左声道样本再记录右声道样本数据是以连续通道的方式存储。不过多数情况下我们只需要使用交错模式就可以了。 缓冲区buffer 数据缓冲区一个缓冲区包含若干个周期所以buffer是由若干个周期所组成的一块空间。下面一张图直观地表示了buffer、period、frame、sample样本长度之间的关系假设一个buffer包含4个周期、而一个周包含1024帧、一帧包含两个样本左、右两个声道
计算机采集音频的模型
音频采集主要有三者①音频输出及捕获设备②codec编解码设备③MCU带音频数据接口的单片机。如下图所示。
①音频输出及捕获设备扬声器、麦克风 扬声器负责根据输入的模拟量数据播放声音。 麦克风负责把声音转化成模拟量并输出。
②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存在的问题 Codec驱动与SOC中断CPU耦合严重这将导致代码重复一个Codec驱动每个cpu上会出现不同的版本。 当音频事件发生时(插拔耳机音箱)没有标准的方法通知用户尤其在移动端此事件非常常见。 当播放/录制音频时驱动会让整个codec处于上电状态这样会在移动端非常浪费电量。同时也不支持改变采样频率/配置电流来节约功耗。
针对以上问题提出了ASOC(ALSA System on Chip)来力争解决上述问题。解决方法如下 Codec代码独立不再耦合与CPU这样可以增加Codec代码重复利用。 在Codec和Soc之间通过简单的I2S/PCM音频接口通信这样SOC和Codec只需要注册自己相关的接口到ASOC code即可。 动态的电源管理(Dynamic Audio Power Management)DAPM。DAPM始终将Codec自动设置在最低功耗状态运行。 消除pop音。控制各个widget上下电的顺序消除pop音。 添加平台相关的控制运行平台添加控制设备到声卡。
Linux音频框架的三类角色
ASOC音频架构为了实现上述的新featureASOC将嵌入式音频系统分为三大类可重复使用的驱动程序: Platform, Machine, Codec。
Codec类: Codec即编解码芯片的驱动此Codec驱动是和平台无关包含的功能有: 音频的控制接口音频读写IO接口以及DAPM的定义等。如果需要的话此Codec类可以在BTFMMODEM模块中不做修改的使用。因此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部分。