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音频的路由控制:不同路由可以设置多个寄存器

的不同配置组合,形成不同的音频通道,从而当路由改变时,底层codec通道随之改变。

3.Android中音频采样频率、通道数问题:

Android向下强制设定:播放时,双声道(立体声),采样频率为44.1kHz,当SD卡中音频文件是单声道或者频率不是44.1kHz时,Android会自动处理,使得送给驱动的数据流是双声道44.1kHz。录音时,单声道,采样频率固定为8kHz,因为手机上生成的一般是amr或者3gpp压缩格式,文件要尽量小,便于彩信等应用的传输。对做音频驱动的同志来说就很好了,只需要悉心配置好两种频率。

4.音频无声:

通用codec芯片wm9714、alc5620之类的都有回环模式loopback,可以先用loopback模式把mic的录音送到spk,有声音说明

芯片大部分逻辑很正常;接着,应该调通控制接口,能读写codec寄存器;最后再调试I2S、ac97等数字接口。

在dma中断中添加打印可以让数据流一目了然。

5.音频效果不好:

通常是频率问题,记住DAC、ADC的频率必须设置好,他们一般由codec芯片中PLL分频产生。有些芯片要求把ADC、DAC

等模块上电后,才能设置其频率,否则无效,但是能写入,这是极容易忽视的一个问题。削顶失真,调小音量可以解决。

更多相关文章

  1. Android(安卓)4.x下基于wm8994的mic检测
  2. Android(安卓)多媒体应用——MediaRecorder录制音频
  3. Android(安卓)扬声器与听筒的切换
  4. Android(安卓)Capture Android(安卓)System Audio
  5. Android(安卓)使用MediaPlayer播放assets或者raw目录的音频文件
  6. 【Android(安卓)Developers Training】 84. 将定期更新的影响最
  7. 如何获取 Android(安卓)设备的CPU核数、时钟频率以及内存大小
  8. android AV同步详解
  9. setVolumeControlStream(int streamType)

随机推荐

  1. android keyboard keycode
  2. Android(安卓)studio DrawerLayout
  3. Android(安卓)- 获取控件(包括状态栏与标
  4. android 调用相机拍摄照片视频
  5. Error:Failed to resolve: com.android.s
  6. Android中隐藏标题栏和状态栏
  7. 企业级Android(安卓)Application Activit
  8. Android(安卓)手机获取时区
  9. android 使用vcard示例
  10. 判断用户使用的是 Android(安卓)手机还是