Android 音频系统 1 -- codec

摘要:
它将音频模拟信号划分为SSI SerialSoundInterface DAPM DynamicAudioPowerManagement1。物理结构音频编解码器codec负责处理音频信息。编解码器通过I2C总线和数字音频接口DAI(IIS)与处理器通信。I2C总线CPU可以通过它读写编解码器寄存器数据。


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(IIS)进行通信。

 I2C总线 - cpu通过它 实现对Codec寄存器数据的读写。

 DAI(IIS) - 实现音频数据在CPU和Codec间的通信。

Android 音频系统 1 -- codec第1张

以Codec作为研究对象,它的输入有Mic(Microphone),PhoneIn电话信号等,输出有耳机HP(HeadPhone),扬声器Speaker和PhoneOut电话信号。另外需要注意在Codec与CPU端间也有音频数字信号的输入输出。

1) 播放音乐

 Android 音频系统 1 -- codec第2张

2) 录音

 Android 音频系统 1 -- codec第3张

3) 电话

--- 打电话 ---                                                           --- 接听---

 Android 音频系统 1 -- codec第4张  Android 音频系统 1 -- codec第5张

4) 通过蓝牙打电话

--- 打电话 ---                                                           --- 接听---   

 Android 音频系统 1 -- codec第6张 Android 音频系统 1 -- codec第7张

 2. 系统架构

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

Android 音频系统 1 -- codec第8张

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

Android 音频系统 1 -- codec第9张

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

 Android 音频系统 1 -- codec第10张

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

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

Android 音频系统 1 -- codec第11张

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

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

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




免责声明:文章转载自《Android 音频系统 1 -- codec》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos 安装详解IDEA下载gitHub私有仓库代码(github ssh key生成方法)(git@github.com:Permission Denied(publickey)解决)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

<转>主流蓝牙BLE控制芯片详解(3):创杰 IS1685S

[导读] IS1685S是一款高度集成的超低功耗芯片,应用于射频和基带芯片的蓝牙V3.0 + EDR单声道耳机。 智能型无线音频数据传输产品——S1685S单声道蓝牙芯片,是低成本的高效率单声道无线传输方案。采用免驱动方式,客户只需要把模块接入应用产品,通电,连接按键就可以快捷地实现音乐的无线传输,享受无线音乐的乐趣。   同系列芯片资料推荐:     主...

大型网站技术架构,架构师领导艺术

架构师的工作:架构设计,软件开发, 其他一些管理职能:规划产品路线、估算人力资源和时间资源、安排人员职责分工,确定计划里程碑点、指导工程师工作、过程风险评估与控制。 这些管理事务需要对产品技术架构、功能模块划分、技术风险都熟悉的架构师参与或直接负责。 在软件开发过程中,架构师除了实现技术架构,完成产品技术实现外,还需要和项目组内外各种角色沟通协调,可以说架...

前后端分离实践(一)

前言 最近这一段时间由于Nodejs的逐渐成熟和日趋稳定,越来越多的公司中的前端团队开始尝试使用Nodejs来练一下手,尝一尝鲜。 一般的做法都是将原本属于后端的一部分相对于业务不是很重要的功能迁移到Nodejs上面来,也有一些公司将NodeJS作为前后端分离的一个解决方案去施行。而像淘宝网这类的大型网站也很早的完成了前后端的分离,给我们这样的后来者提供了...

SOA之(1)——SOA架构基础概念

在深入探讨什么是面向服务的架构(SOA)之前,先建立一些基本的概念和术语的基本描述而非严格定义,所以也许有些定义在业内还存留争议,此处暂且忽略。 架构基础 技术架构(Technology Architecture)——某物的基础物理设计(The fundamental of physical design of something) 技术基础设施(...

linux使用curl发送http get与post请求

1. curl发送get请求curl http://11.120.12.89:6666/sengMsg?phone=18790987654&name=lily&msg=aaa 注意:有多个参数时需要把&转义一下,否则获取不到之后参数会报错 2. curl发送post请求post请求类型application/x-www-form-...

vue实现简单日历

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>日历</title> 7 <style> 8 * {...