zoukankan      html  css  js  c++  java
  • Android 音频系统[相当好zz]

    地址:http://blog.csdn.net/qianjin0703/article/details/6387662

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

  • 相关阅读:
    PAT 解题报告 1009. Product of Polynomials (25)
    PAT 解题报告 1007. Maximum Subsequence Sum (25)
    PAT 解题报告 1003. Emergency (25)
    PAT 解题报告 1004. Counting Leaves (30)
    【转】DataSource高级应用
    tomcat下jndi配置
    java中DriverManager跟DataSource获取getConnection有什么不同?
    理解JDBC和JNDI
    JDBC
    Dive into python 实例学python (2) —— 自省,apihelper
  • 原文地址:https://www.cnblogs.com/linucos/p/2982999.html
Copyright © 2011-2022 走看看