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的音频系统拥有一个比较标准和健全的架构,从上层应用,java framework服务AudioMananger,本地服务AudioFlinger,抽象层AlsaHAL,本地库,再调用external的Alsa-lib外部支持库,最后到底层驱动的codec,可谓"五脏俱全"。

以系统启动AuidoFlinger为例,简要窥探Alsa Sound的组织架构。

Java服务AudioManager作为服务端,本地服务AudioFlinger作为客户端,两者通过Binder机制交互。AudioFlinger对硬件功能的具体实现(比如setMode设置电话/蓝牙/录音等模式)交给硬件抽象层AlsaHAL完成。抽象层可以调用本地标准接口,比如mASLADevice->route,或者直接调用Alsa-lib库去操作底层驱动。

Linux的音频驱动结构相对复杂,源码位于内核目录下的/sound/soc/,其中/codec文件夹下存放与平台无关的编解码器驱动,/imx文件夹下存放于freescale imx平台相关的音频驱动,主要可分为SSI驱动和DAI驱动。

以声卡驱动的数据结构为切入点分析,

1) struct snd_soc_codec - 由与平台无关的codec驱动实现。

2) struct snd_soc_platform - 由与imx平台相关的DAI驱动实现,主要实现了音频数据的DMA传输功能。

3) struct snd_soc_dai_link - 将平台相关的DAI与平台无关的codec联系起来。


更多相关文章

  1. Android中Telephony学习笔记(5)-CDMA/GSM/LTE/WCDMA
  2. Android开发指南(32) —— Multimedia and Camera - Audio Captu
  3. Android(安卓)加密/解密音频文件(AES)
  4. android在armv4t中跑
  5. Android中字符设备驱动和应用实例(一)——驱动部分
  6. android之wifi移植全过程
  7. Android音频数据传输
  8. 谈谈Android中WIFI 架构和控制流程
  9. Android应用程序访问硬件驱动(JNI方式)

随机推荐

  1. Android横屏,全屏设置
  2. Android(安卓)ImageView.ScaleType总结
  3. Android解决NDK not configured问题
  4. android 长按菜单
  5. 读取指定路径数据库的方法
  6. Android之Service
  7. Android button防多次点击
  8. Android adb shell后面可用的常用命令详
  9. android中实现全局变量
  10. Android优秀开源项目大全