alsa的动态库安装在哪里_alsa 音频库的移植

本文介绍了Linux ALSA音频库的移植过程,重点在于alsa-lib的移植,包括配置选项如`--host`, `--prefix`, `--with-configdir`等。内容涉及如何解决在嵌入式系统中遇到的设备节点、配置文件路径问题,以及alsa-utils的移植注意事项,如禁用alsamixer和xmlto。" 111344188,10292994,华为VXLAN配置实践:构建大二层网络,"['华为网络', 'VXLAN配置', 'SDN', '网络虚拟化', 'OSPF']
摘要由CSDN通过智能技术生成

alsa 是在LINUX出现比较晚的音频处理库,主要是针对原有的OSS的库进行改进.性能更好,支持多个播放源等.但相应的,增加的编程的复杂性.

旧的oss是采用标准文件IO接口,设备打开采用open,声音播录是采用数据IO接口(read/write),设备的参数采用ioctl来控制.都是系统调用因此无需额外库和配置文件来操作设备.但alsa也是最终采用open/read/write/ioctl,但操作结点更多.更复杂.因此在编程中是采用额外的库来操作的.

ALSA的体系结构

主要跟编程相关是

其中alsa-driver,alsa-firwware是内核开发者所接触的东西,对于已经正常运行硬件,通常意味着这一部分已经整合到内核当中,无需修改.

而alsa-utils主要是测试一些小工具.

因此对于一个应用程序开发者,或者嵌入式应用开发者,接触到主要是alsa-lib编译出来的库libasound.

Linux ALSA 驱动测试

以下是我在RHEL 5上测试ALSA的结果,在ARM或MIPS开发板上类似

如果安装ALSA,在/proc会看到相应设备:

用cat /proc/asound/devices

[root@hxy alsa-lib-1.0.22]# cat /proc/asound/devices  2:        : timer  3:        : sequencer  4: [ 0- 0]: raw midi  5: [ 0- 1]: digital audio playback  6: [ 0- 0]: digital audio playback  7: [ 0- 0]: digital audio capture  8: [ 0]   : control

正常情况下,在你的/dev/snd会看到如下设备结点(有例外,就是内核驱动调整了结点位置)

用ls -l /dev/snd

[root@hxy alsa-lib-1.0.22]# ls -l /dev/sndtotal 0crw------- 1 root root 116, 8 Mar  2 02:41 controlC0crw------- 1 root root 116, 4 Mar  2 02:41 midiC0D0crw------- 1 root root 116, 7 Mar  2 02:41 pcmC0D0ccrw------- 1 root root 116, 6 Mar  2 02:41 pcmC0D0pcrw------- 1 root root 116, 5 Mar  2 02:41 pcmC0D1pcrw------- 1 root root 116, 3 Mar  2 02:41 seqcrw------- 1 root root 116, 2 Mar  2 02:41 timer

通常桌面版已经安装了alsa-utils.可以执行一下aplay -h,测试是否输出.如果可以来播入一下wav文件来测试整个环境是否正常工作.

以下是一些用alsa-utils测试样例播放wave文件aplay /mnt/nfs/test.wav

变频播放,(以是以 44 KHz来播放音频)aplay -D rate_44k /mnt/nfs/test.wav

录音,以20秒的间隔(-d 20),立体声(-c 2),频率是 8000Hz来录制Wave格式音频arecord -d 20 -c 2 -t wav -r 8000 -f "Signed 16 bit Little Endian" /mnt/nfs/test.wav

测试混音播放(先是播放test1.wav,然后再同时播放test2.wav)aplay -D plug:dmix_44k /mnt/nfs/test1.wav &

aplay -D plug:dmix_44k /mnt/nfs/test2.wav

设置放音增益(0 to 3)amixer set Master 1

设置录音音量(0-31)amixer set Line 10

嵌入式LINUX下 alsa库移植.

在ARM-LINUX/MIPS LINUX下移植ALSA库,首先保存设备驱动结点正确无误.

然后主要移植 alsa-lib

alsa-lib的移植.

解压 tar xvjf alsa-lib-1.0.22.tar.bz2

cd alsa-lib-1.0.22

生成Makefile

./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-static --enable-shared  --disable-python  --with-configdir=/usr/local/share --with-plugindir=/usr/local/lib/alsa_lib

在这里要注意 --with--configdir的选项.它将影响 include/config.h中的 ALSA_CONFIG_DIR 目录.

它默认是你的--prefix目录.这样在嵌入式交叉编译将是一个桌面机的路径,在libasoud.so运行.会提示,如果出来这个提示,一般都是ALSA_CONFIG_DIR路径错误造成的.

ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM default

aplay: main:546: audio open error: No such file or directory

--with-plugindir也是同样道理了.它是设为 ALSA_PLUGIN_DIR 宏.

补充:最近一次演示发现alsa库按装会受 --with-configdir 影响总是share的目录之上,而不是我想要的 output目录.因此对于出现这种情况。只能把/usr/local/share的alsa目录拷回output目录.

另外,有一些开发板没有按驱动要求在/dev/snd建立相应alsa设备结点。比如我手头新拿的mini6410开发板直接把几个结点直接建在/dev下,这时alsa库编译要调整

并且脚本调整如下.

./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

编译 make

安装 make install

开发板发布注意:

在开发板上发布alsa库.除了libasound.so库以外,必须还要把 alsa.conf发布到板上--with-configdir所指向目录下的alsa目录,否则还是会报"audio open error: No such file or directory".

这个文件可以在make install后在你安装目录下的share找到alsa目录,把这个目录整个拷贝到开发板即可.

alsa-utils移植

解压:tar xvjf alsa-utils-1.0.22.tar.bz2

cd alsa-utils-1.0.22

生成Makefile

./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-static --enable-shared    --with-configdir=/usr/local/share --with-libiconv-prefix=$PWD/../../output/arm-linux CFLAGS="-I$PWD/../../output/arm-linux/include" LDFLAGS="-L$PWD/../../output/arm-linux/lib -lasound -liconv"  --disable-alsamixer --disable-xmlto

注意这里LDFLAGS是必须,否则会找不到libasound.另外 alsamixer 是一个ncurses程序,基本上在嵌入式终端上很难移植.所以这里取消掉.--disable-xmlto也是因为找不到库.

编译 make

安装 make install

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值