Andrew Huang 转载请注明作者和网址.
一般嵌入式系统只一个声音硬件作输出,所以大部分操作都采用默认的声卡即可操作。因此没有注意多网卡切换的问题,但是引入USB 声卡后,在嵌入式系统形成N个声卡,这样如果自动选定的缺省声卡,如何在应用程序切换声卡变成很现实的问题。
因为设计关系统OSS是无法进行多声卡的操作,只有ALSA才支持.
这个文章对于多声卡的操作描述很详细
对于ALSA多声卡操作我重点关注如下几个问题.
1.如何象LINUX的图形界面显示系统的所有声卡的列表?
2.如何选定某一个声卡为缺省输出?
3.如果在应用程序选定某一个非缺省的声卡来播放声音?
查看alsa声卡列表的功能,可以查看aplay -l 的实现.这个命令就是用来实现
一.测试环境
测试环境:mini6410 , Linux 2.6.28.6. 内核增加use auido
1.1.编译内核
增加USB Audio选项
1.2 编译 alsa-lib/alsa-utils
编译alsa库最好编译两次:
第一次把alsa的配置文件放入output目录以便发布../configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-static --enable-shared --disable-python --with-plugindir=/usr/local/lib/alsa_lib
如果是mini6410则需要把缺省的设备结点目录/dev/snd 改成 /dev
./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-static --enable-shared --disable-python --with-plugindir=/usr/local/lib/alsa_lib --with-alsa-devdir=/dev
make
make install
第二次让缺省库使用时去找/usr/local/share/alsa,
make clean
./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-static --enable-shared --disable-python --with-configdir=/usr/local/share/alsa --datarootdir=$PWD/../../output/arm-linux/share
--with-alsa-devdir=/dev #红色是mini6410要加的
make
make install
这一次为解决运行时提示配置文件
ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:546: audio open error: No such file or di