• Android 音频系统 1 -- codec



    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间的通信。

    以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联系起来。




  • 相关阅读:
    购买云主机时应该注意哪些事项
    wdcp的安装方法与常见问题
    推荐一些不错的计算机书籍(php c mysql linux等等)
    .htaccess详解及.htaccess参数说明【转】
    常用的7个.htaccess代码组织某个国家的IP访问
    最新ecshop v2.7.3版本去版权完全版
    javascript常用数组算法总结
    10道javascript笔试题
    Magento显示多货币,Magento 多货币设置
    Magento后台手动修改订单状态方法及手动修改方法php
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744615.html
Copyright © 2020-2023  润新知