1.Android+alsa音频体系大体结构:
从alsa的角度由下往上看:linux中有alsa驱动层,其中,/sound/core/pcm_native.c文件中的snd_pcm_f_ops是alsa驱动层对alsa_lib层的接口;Android中有alsa_lib层(在donut/external/alsa_lib目录下)和alsa应用层;
从Android的角度由下往上看:首先是cpp库层,然后是框架层,最后是java应用层。库层分3个部分:首先是硬件接口层AudioHardwareInterface,其派生类负责调用alsa_lib接口,形成read、write等虚函数;其次是音频环层AudioFlinger,利用多态的性质调用硬件接口层AudioHardwareInterface派生类的read、write等虚函数并最终管理read和write两个线程。最后,是媒体录音MediaRecorder和媒体播放层MediaPlayer。进入或激活read/write线程,实现录音放音功能。
2.Android中音频配置文件问题:
配置文件/system/etc/asound.conf其实是alsa体系留的一手。alsa体系提供了这样一种机制:应用层直接改变音频codec的
寄存器,具体而言:linux驱动中创建snd_kcontrol_new控制结构,并关联到codec寄存器,asound.conf文件通过控制结构名字,
就能关联到寄存器,从而改变寄存器的值。asound.conf文件主要用来做Android音频的路由控制:不同路由可以设置多个寄存器
的不同配置组合,形成不同的音频通道,从而当路由改变