0. 专用术语
1. 物理结构
2. 系统架构
本文基于Freescale IMX平台Codec ALC5625为例。
0. 专用术语
ASLA - Advanced Sound Linux Architecture
OSS - 以前的Linux音频体系结构,被ASLA取代并兼容
Codec - Coder/Decoder
I2S/PCM/AC97 - Codec与CPU间音频的通信协议/接口/总线
DAI - Digital Audio Interface 其实就是I2S/PCM/AC97
DAC - Digit to Analog Conversion
ADC - Analog to Digit Conversion
DSP - Digital Signal Processor
Mixer - 混音器,将来自不同通道的几种音频模拟信号混合成一种模拟信号
Mute - 消音,屏蔽信号通道
PCM - Pulse Code Modulation 一种从音频模拟信号转换成数字信号的技术,区别于PCM音频通信协议
采样频率 - ADC的频率,每秒采样的次数,典型值如44.1KHZ
量化精度 - 比如24bit,就是将音频模拟信号按照2的24次方进行等分
SSI - Serial Sound Interface
DAPM - Dynamic Audio Power Management
1. 物理结构
音频编解码器Codec负责处理音频信息,包括ADC,DAC,Mixer,DSP,输入输出以及音量控制等所有与音频相关的功能。
Codec与处理器之间通过I2C总线和数字音频接口DAI进行通信。
I2C总线 - 实现对Codec寄存器数据的读写。
DAI - 实现音频数据在CPU和Codec间的通信。
以Codec作为研究对象,它的输入有Mic(Microphone),PhoneIn电话信号等,输出有耳机HP(HeadPhone),扬声器Speaker和PhoneOut电话信号。另外需要注意在Codec与CPU端间也有音频数字信号的输入输出。
1) 播放音乐
2) 录音
3) 电话
--- 打电话 ---
--- 接听---
4) 通过蓝牙打电话
--- 打电话--- ---接听---
2. 系统架构
Android的音频系统拥有一个比较标准和健全的架构,从上层应用,javaframework服务AudioMananger,本地服务AudioFlinger,抽象层AlsaHAL,本地库,再调用external的Alsa-lib外部支持库,最后到底层驱动的codec,可谓"五脏俱全"。
以系统启动AuidoFlinger为例,简要窥探AlsaSound的组织架构。
Java服务AudioManager作为服务端,本地服务AudioFlinger作为客户端,两者通过Binder机制交互。AudioFlinger对硬件功能的具体实现(比如setMode设置电话/蓝牙/录音等模式)交给硬件抽象层AlsaHAL完成。抽象层可以调用本地标准接口,比如mASLADevice->route,或者直接调用Alsa-lib库去操作底层驱动。
Linux的音频驱动结构相对复杂,源码位于内核目录下的/sound/soc/,其中/codec文件夹下存放与平台无关的编解码器驱动,/imx文件夹下存放于freescaleimx平台相关的音频驱动,主要可分为SSI驱动和DAI驱动。
以声卡驱动的数据结构为切入点分析,
1) struct snd_soc_codec - 由与平台无关的codec驱动实现。
2) structsnd_soc_platform - 由与imx平台相关的DAI驱动实现,主要实现了音频数据的DMA传输功能。
3)struct snd_soc_dai_link - 将平台相关的DAI与平台无关的codec联系起来。
分享到:
相关推荐
Android凭借其开源,良好的用户体验,高性价比,庞大的应用程序等优势迅速发展起来并保持强劲的发展势头。...本文分析音频系统架构的各个层次,并着重阐述ALSA在Android音频系统中的应用以及Audio驱动的详细实现。
主要为大家详细介绍了Android音频系统AudioTrack的使用方法,如何使用AudioTrack进行音频播放,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
深度剖析 Android音频系统解析与改进.docx
Android的音频系统 第一部分 Audio系统综述 第二部分 Audio系统和上层接口 第三部分 Audio的硬件抽象层
建设项目
对于驱动,Android下驱动和Linux驱动不完全相同,比如Android音频系统中对路由的选择可以通过配置文件实现,再比如Android下LCD驱动需要双缓冲等。在这之后对Android应用程序的蓝牙模块进行了深入的分析;最后进行了...
android音频口通信 socket 多线程 (静默安装卸载 增量升级 系统重启 适用于android原生系统) app开机自启动
第7章“Android的Audio系统”,主要是音频的输入输出环节,音频系统从驱动程序、本地框架到Java框架都具有内容。 第8章“Android的Video输入输出系统”,介绍Android的Video输入输出系统,包括Overlay系统和...
如果实现一个音频文件的播放,那么在应用程序中提供播放音频文件功能的最简单的方式是利用内置的“Music(音乐)”应用程序的功能--即使用系统自带的或已安装好的音乐播放器来播放指定的音频文件。
Android音频录制和播放 支持原生系统调用和自定义页面播放,6.0后的系统都需要手动开启相关录音权限
基于Android的音频管理系统 .docx
基于Android的嵌入式音频系统方案.doc
而Android系统的多媒体框架也为开发者提供了MediaRecorder类来实现视频录制功能。在使用MediaRecorder时我们要注意以下几点: 第一:无法使用模拟器进行测试,在使用MediaRecorder进行音视频录制时,需要用真机进行...
《android技术内幕:系统卷》 前言 第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和应用...
Android音频视频硬编码和解码_MediaCodec,采用系统自带的编码器和解码器MediaCodec,研究中遇到很多坑,在此记录下来,方便自己和朋友们查看。
第7章“Android的Audio系统”,主要是音频的输入输出环节,音频系统从驱动程序、本地框架到Java框架都具有内容。 第8章“Android的Video输入输出系统”,介绍Android的Video输入输出系统,包括Overlay系统和...
Android车机系统虚拟音频源播放器CarVirtualPlayer