基本了解Android音频驱动的人都应该知道,Android音频驱动的基础是基于linux ALSA音频架构而开发出来的,并针对了移动设备优化,使其可以更好的在移动设备中对音频进行处理,那还是先看看ALSA的相关介绍吧!

ALSA具有更加友好的编程接口,并且完全兼容于OSS,对应用程序员来讲无疑是一个更佳的选择。ALSA系统包括驱动包alsa-driver、开发包 alsa-libs、开发包插件alsa-libplugins、设置管理工具包alsa-utils、其他声音相关处理小程序包alsa-tools、特殊音频固件支持包alsa- firmwareOSS接口兼容模拟层工具alsa-oss7个子项目,其中只有驱动包是必需的。

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

由图可以看出,用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能。


alsa- driver
指内核驱动程序,包括硬件相关的代码和一些公共代码,非常庞大,代码总量达数十万行;alsa-libs指用户空间的函数库,提供给应用程序使用,应用程序应包含头文件asoundlib.h,并使用共享库libasound.soalsa-utils包含一些基于ALSA的用于控制声卡的应用程序,如alsaconf(侦测系统中声卡并写一个适合的ALSA配置文件)、alsactl(控制ALSA声卡驱动的高级设置)、 alsamixer(基于ncurses的混音器程序)、amidi(用于读写ALSA RawMIDI)、amixerALSA声卡混音器的命令行控制)、aplay(基于命令行的声音文件播放)、arecord(基于命令行的声音文件录制)等。
目前ALSA内核提供给用户空间的接口有:
信息接口(Information Interface/proc/asound
控制接口(Control Interface/dev/snd/controlCX
混音器接口(Mixer Interface/dev/snd/mixerCXDX
PCM
接口(PCM Interface/dev/snd/pcmCXDX
Raw
迷笛接口(Raw MIDI Interface/dev/snd/midiCXDX
音序器接口(Sequencer Interface/dev/snd/seq
定时器接口(Timer Interface/dev/snd/timer
OSS类似,上述接口也以文件的方式被提供,不同的是这些接口被提供给alsa-lib使用,而不是直接给应用程序使用的。应用程序最好使用alsa-lib,或者更高级的接口,比如jack提供的接口。

Android增加了一个AudioFinger,这个可以简单的理解为AndroidALSA音频子系统的标准化的插件模块,它包含了AudioMixer[混音器]AudioResampler[重采样]等子模块,AudioResampler即我们理解的SRCAndroid换了一个新名称而已。针对SRCAndroid做了改进,但改进并不是以去除SRC为目的,而是修改了默认的输出频率,AndroidSRC目标采样率44.1kHz,非该值的采样率都将SRC处理。例如播放48kHz采样率的信号,输出的最终是44.1kHz,这对音质将产生负面影响。这个可以通过测试证明。

ALSA是一个针对Linux桌面版本设计的音频架构,它实际上是不适合智能终端设备的,起码里面大量的开源驱动代码是可以去除的,对与Android来说,这些都是废代码。从Android2.3起,启用了一个新的音频架构。它放弃了一直使用的ALSA架构,因此系统文件夹中,也不再有LibAudioALSA.so这个文件。

Android2.3起,架构已经做了修改,在针对内部代码进行了优化,去除了冗余代码,理论上让系统能变得更加高效,可以将新架构理解为一个精简的或者为智能终端设备定制的ALSA架构。遗憾的是,它同样存在SRC严重劣化的问题,通过测试可以证明。

更多相关文章

  1. 【Android】常用的adb命令
  2. Android播放音频的两种方式
  3. android 获取应用程序包名,图标,入口Activity类
  4. Android应用程序消息处理机制(Looper、Handler)分析(3)
  5. Android平台上从Camera的jpegquality菜单研究JNI接口(三)
  6. 裁判文书App(2020最新版) 逆向过程分析
  7. 3月22日学习记录(2)(显式intent与隐式intent的区别)
  8. Android客户端集成支付宝快捷支付
  9. Android(安卓)Market软件月增长率高达70%

随机推荐

  1. Android进程与线程基本知识
  2. [转载]android Instrumentation
  3. Ubuntu上开发Android
  4. 10个快速开发Android/Iphone web App应用
  5. Android之——多线程断点续传下载示例
  6. Android(安卓)studio删除工程项目
  7. Google Android开发精华教程
  8. android cmd adb命令安装和删除apk应用
  9. 20180502_从零开始的android持久库room其
  10. android uiautomator 截取图片