Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2150607
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: LINUX

2015-09-06 15:28:16

1. 介绍
ALSA产生的原因是,原先的linux声卡驱动oss开发维护不及时。Jaroslav Kysela写了一个声卡驱动,并开始了ALSA项目。从内核2.6开始,ALSA已经内建在内核中.
ALSA是接近内核低级的声音操作,能够最大化地控制声音和提高性能。若只是想播放音频文件,可以利用系统中高级的API库,如SDL和OpenAL
1.1
ALSA: Advanced Linux Sound Architecture (ALSA),它包括三个部分
alsa-driver --> ALSA的内核驱动,从linux2.6中己集成
alsa-lib      --> ALSA 应用库即libasound,它给上层应用提供alsa的API
alsa-utils    --> ALSA小的测试工具.如aplay/arecord等
参考:
Introduction to Sound Programming with ALSA


LFS文档之多媒体部分


2. alsa的编译安装
alsa-lib的下载地址:
ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.23.tar.bz2
alsa-util的下载地址
ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.23.tar.bz2
  1. 附安装方法:
  2. 1. make _install ,然后./configure --prefix=$(real_path)/_install,然后make,最后make install
  3. 2. 安装错误解决
  4.   a. patch: command not found
  5.        解决: sudo apt-get install patch
  6.   b. configure: error: required curses helper header not found
  7.        解决:sudo apt-get install libncurses5-dev
  8.   c. configure: error: panelw library not found
  9.        解决: ./configure --with-curses=ncurses
  10.   d. xmlto: command not found
  11.        解决: sudo apt-get install xmlto
ubuntu上通常己安装过了alsa,这儿下载源码编译安装主要是为了方便加打印调试用的。
3. Linux ALSA 驱动测试
3.1 如果安装ALSA,在/proc会看到相应设备:
  1. cong@msi:/tmp$ cat /proc/asound/devices
  2.   1: : sequencer
  3.   2: [ 1- 2]: digital audio capture
  4.   3: [ 1- 0]: digital audio playback
  5.   4: [ 1- 0]: digital audio capture
  6.   5: [ 1- 0]: hardware dependent
  7.   6: [ 1] : control
  8.   7: [ 0- 8]: digital audio playback
  9.   8: [ 0- 7]: digital audio playback
  10.   9: [ 0- 3]: digital audio playback
  11.  10: [ 0- 0]: hardware dependent
  12.  11: [ 0] : control
  13.  33: : timer
3.2      
正常情况下,在你的/dev/snd会看到如下设备结点(有例外, 就是内核驱动调整了结点位置)
  1. cong@msi:/tmp$ ls -l /dev/snd
  2. total 0
  3. drwxr-xr-x 2 root root 80 Sep 6 10:00 by-path
  4. crw-rw-rw-+ 1 root audio 116, 11 Sep 6 10:00 controlC0
  5. crw-rw-rw-+ 1 root audio 116, 6 Sep 6 10:00 controlC1
  6. crw-rw-rw-+ 1 root audio 116, 10 Sep 6 10:00 hwC0D0
  7. crw-rw-rw-+ 1 root audio 116, 5 Sep 6 10:00 hwC1D0
  8. crw-rw-rw-+ 1 root audio 116, 9 Sep 6 10:00 pcmC0D3p
  9. crw-rw-rw-+ 1 root audio 116, 8 Sep 6 10:00 pcmC0D7p
  10. crw-rw-rw-+ 1 root audio 116, 7 Sep 6 10:00 pcmC0D8p
  11. crw-rw-rw-+ 1 root audio 116, 4 Sep 6 10:06 pcmC1D0c
  12. crw-rw-rw-+ 1 root audio 116, 3 Sep 6 10:09 pcmC1D0p
  13. crw-rw-rw-+ 1 root audio 116, 2 Sep 6 10:00 pcmC1D2c
  14. crw-rw-rw-+ 1 root audio 116, 1 Sep 6 10:00 seq
  15. crw-rw-rw-+ 1 root audio 116, 33 Sep 6 10:00 timer
3.3  ubuntu
通常桌面版已经安装了alsa-utils.可以执行一下aplay -h,测试是否输出.如果可以来播入一下wav文件来测试整个环境是否正常工作.
 
以下是一些用alsa-utils测试样例
播放wave文件
 aplay  ./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
参考:
asla架构和alsa-lib音频库的移植
http://blog.csdn.net/reille/article/details/5845913 


阅读(2062) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~