首先了解下alsa的基本架构:
Application
--------------- Alsa-lib User Space ------------------------------------- Alsa Kernel Space ------- sound driver ---------------------------------- Hardware Application : 比如aplay ,它不是直接调用Kernel所提供的接口,而是调用ALSA-lib 的接口。所以应用程序只要#include "asound.h"
并链 接libasound . 对于上面的架构,在某一时刻只能有一个程序打开声卡并占有它,此时其它程序打开的话,会返回busy. 如要支持同时可 以多个应用程序打开声卡,需要支持混音功能,有些声卡支持硬件混音,但大部分声卡不支持硬件混音,需要软件混音。这时需要
ESD,pulseAudio等,架构变为:
---------------ESD , pulseaudio -------------------- Alsa-lib User Space ------------------------------------- Alsa Kernel Space ------- sound driver ---------------------------------- Hardware 此时,应用程序将调用ESD,pulseaudio等混音器提供的接口。对于ESD,很多程序支持,比如mplayer . 对于pulseaudio ,有相应的patch。
Alsa本身也提供混音的plugin,dmix .
架构1的/usr/share/alsa/asound.conf的例子:
pcm.card0 { 对于period_size和buffer_size,要注意,这里将它们修改为1024 ,8192. 用mplayer进行测试: board1:$mplayer -slave -quiet test1.mp3 board2:$mplayer -slave -quiet test2.mp3 就可以听到2个音乐混在一起输出,且可以各自控制各自的播放。 |
|
来自: dwlinux_gs > 《alsa混音conf》