关于Linux的alsa音频问题解决

    到今日,在android平台上调试声音的方面终于有了进展,原来是需要改一个配置文件,目前只是解决了问题,具体原因以后再分析。硬件平台是6410+WM9714,软件平台是ANDROID。现在由于android系统启动时,加载音频服务不成功,处于一个死循环中,老停在登陆界面。此时打印的Logcat信息如下: 
......... 
AudioFlinger not published, waiting...

Waiting for sevice media.audio_flinger...
.........。 
一开始我以为是WM9714的内核音频驱动有问题,所以先验证音频驱动是否OK。 
(1)用cat xxx.wav > /dev/snd/audio时耳机全是播出滋滋的噪声,没有一点音乐声; 
(2)用aplay xxx.wav时没有声音,会提示Unable to install hw params。由此分析是alsa配置存在问题,但具体是什么参数不得而知; 
(3)在实验方法(1)播放出噪声时,直接用语句读出WM9714的全部寄存器值。读出的ID号正确,说明AC97与codec的通讯无误;后来将全部的寄存器值发给wofson原厂工程师烧到他们自己的平台上,播放音频文件正常。进一步证明寄存器设置是无误的,AC-LINK通讯无误,驱动无误。

      由此原因集中在配置上。后来同事分析和试了一把,改动/vendor/sec/smdk6410/init.smdk6410.rc中的

setprop ro.radio.noril  yes改成setprop ro.radio.noril   no。虽然我们做的是MID产品,没有RIL电话功能硬件,但还是要将这部分服务加载上去。(但最后试验过,no值也OK)

      另一个需要补充的地方在于:同目录下的init.rc中的:

service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin

      要打开,不能屏蔽。

*******************************************************************************

另2010-02-04补充:在网上看到了类似的错误记录,出现最上述的Logcat服务信息时,叙述如下:有三种可能原因:一是上面所讲的init.rc中的一定要启动mediaserve服务。二是确保ALSA驱动已经加载到系统中。三是在init.rc中要添加alsa相关信息:

symlink /dev/snd/pcmC0D0c /dev/pcmC0D0c
symlink /dev/snd/pcmC0D0p /dev/pcmC0D0p
symlink /dev/snd/controlC0 /dev/controlC0
symlink /dev/snd/timer /dev/timer
chmod 0777 /dev/pcmC0D0c
chmod 0777 /dev/pcmC0D0p
chmod 0777 /dev/controlC0
chmod 0777 /dev/timer
chown root audio /dev/snd/controlC0
chown root audio /dev/snd/pcmC0D0c
chown root audio /dev/snd/pcmC0D0p
chown root audio /dev/snd/timer
setprop alsa.mixer.playback.master Front
setprop alsa.mixer.capture.master Capture
setprop alsa.mixer.playback.earpiece Master
setprop alsa.mixer.capture.earpiece Capture
setprop alsa.mixer.playback.headset Master
setprop alsa.mixer.playback.speaker Master

你可能感兴趣的:(android,驱动,Android,audio)