Tinyalsa/Alsa使用说明
1. Tinyalsa¶
1.1. 简介¶
Tinyalsa = Tiny + ALSA(Advanced Linux Sound Architecture)
目前linux中主流的音频体系结构是ALSA,tinyalsa是ALSA的简化版,tinyalsa是一个轻量级的库,封装了内核的ALSA接口,用于简化用户空间的ALSA编程。
1.2. 使用Tinyalsa自带工具测试¶
-
Tinyalsa源代码
下载链接:https://github.com/tinyalsa/tinyalsa/releases
目录结构utils下包含tinymix.c,tinypcminfo.c,tinycap.c,tinyplay.c。
进入源码包最顶层目录,修改makefile,指定交叉编译工具链及编译器,如:
export ARCH = arm export CROSS_COMPILE = arm-linux-gnueabihf-sigmastar-9.1.0- export CC = $(CROSS_COMPILE)gcc
源码包最顶层目录 make clean ; make,即可在utils目录下生成bin档,用于接下来的测试。
-
menuconfig内核配置以及打开sdk下mi_alsa模块开关
注:Tinyalsa所需要的驱动soundcore.ko,snd.ko,snd-timer.ko,snd-pcm.ko,mi_alsa.ko
-
内核配置
音频框架的配置需要Power Manager支持,配置如下:
Power management options ---> [*] De[*] Device power management core functionality /* 需要替换内核 */
make menuconfig
配置选项如下(编译成模块):Device Drivers ---> <M> Sound card support ---> /* 下一级目录下均不选择默认会生成soundcore.ko和snd.ko */ <M> Advanced Linux Sound Architecture ---> /* 会生成snd-pcm.ko,snd-pcm-oss.ko */ <M> OSS PCM (digital audio) API /* 会生成snd-timer.ko */ [*] [*] PCM timer interface
make modules ; ls modules 即可查看编译生成的ko。
-
打开sdk下mi_alsa模块开关:
进入
project
目录,make menuconfig
,配置如下:Sdk Config ---> Interface Compile Config ---> [*] alsa
在interface目录下make alsa ,即可在对应目录查看生成的mi_alsa.ko
-
加载所有驱动:
注:通过insmod方法要注意加载模块的顺序
insmod soundcore.ko insmod snd.ko insmod snd-timer.ko insmod snd-pcm.ko insmod mi_alsa.ko
-
-
使用bin档tinyplay,tinycap,tinymix,tinypcminfo测试
tinyplay播放测试:
./tinyplay ./1_17/nearend.wav
tinycap录音测试:
./tinycap cap_out.wav
tinymix设置和获取音量:
./tinymix contents
,./tintmix set 1 60
,./tinymix get 1
tinypcminfo查看pcm通道的相关信息:
./tinypcminfo -D 0
2. Alsa¶
2.1. 简介¶
ALSA(Advanced Linux Sound Architecture),高级Linux声音架构。
在内核设备驱动层,ALSA提供了alsa-driver(alsa的驱动程序);在应用层,ALSA提供了alsa-lib(应用程序调用的API函数),应用程序只需要调用alsa-lib提供的API(libasound.so),即可完成对底层音频硬件的控制,ALSA目前已成为Linux主流音频体系结构。alsa-utils是一些工具功能集合库(即alsa的应用程序),可用于录放音测试。
ALSA API可以分解成以下几个主要的接口:
-
控制接口:提供管理声卡注册和请求可用设备的通用功能
-
PCM接口:管理数字音频回放(playback)和录音(capture)的接口
-
Raw MIDI接口:支持MIDI(Musical Instrument Digital Interface),标准的电子乐器。
-
定时器(Timer)接口:为同步音频事件提供对声卡上时间处理硬件的访问。
-
时序器(Sequencer)接口
-
混音器(Mixer)接口
2.2. alsa-lib及alsa-utils移植¶
-
准备工作
alsa-lib版本:alsa-lib-1.2.4.tar.bz2
参考链接:http://www.linuxfromscratch.org/blfs/view/svn/multimedia/alsa-lib.html
alsa-util版本:alsa-utils-1.2.4.tar.bz2
参考链接:http://www.linuxfromscratch.org/blfs/view/stable/multimedia/alsa-utils.html
arm平台:ipc_Pudding demo板
-
交叉编译及安装
下载源码并解压后,进入源码根目录:tar -xvf alsa-lib-1.2.4.tar.bz2
定义编译alsa的输出路径:
export ALSA_INSTALL_PATH=/customer/alsa-1.2.4/alsa_build export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++
-
alsa-lib
-
配置
./configure --prefix=$ALSA_INSTALL_PATH/alsa/ --host=arm-linux --disable-aload --disable-rawmidi --disable-seq --disable-ucm --disable-alisp --disable-old-symbols --disable-python --enable-debug CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --with-plugindir=$ALSA_INSTALL_PATH/alsa/lib --with configdir=$ALSA_INSTALL_PATH/alsa/etc
-
编译
make
-
安装编译好的文件
make install
重要配置项:
-
--host 指定编译器,这里指定为交叉编译器。
-
--prefix 指定编译后文件的安装路径,后续的安装命令会在该目录中创建 lib 和 include 两个目录
-
--with-configdir 指定 conf 文件的安装目录,该目录中对我们最有用的 alsa.conf ,此文件会被直接移植到你的目标系统中
-
--with-alsa-devdir 指定音频设备文件的目录。例如在/dev/snd
-
-
alsa-utils
-
配置
./configure --prefix=$ALSA_INSTALL_PATH/alsa-utils --host=arm-linux --with-curses=ncurses CC="arm-linux-gnueabihf-gcc -lasound -I$ALSA_INSTALL_PATH/alsa/include -L$ALSA_INSTALL_PATH/alsa/lib" --disable-xmlto --disable-alsamixer
-
编译:
make
注:若编译失败,在配置时增加选项--disable-xmlto和--disable-nls
-
安装编译好的文件
make install
重要配置项:
-
--host 指定编译器,与 lib 的配置选项相同
-
--prefix 指定编译后文件的安装路径,与 lib 的配置选项相同
-
--with-alsa-inc-prefix用来指定alsa-lib编译好的文件的include目录
-
--with-alsa-prefix用来指定alsa-lib编译好的文件的lib目录
-
--disable-alsamixer alsamixer是图形化的amixer工具,可能会出现乱码,禁用
-
-
-
使用alsa-utils下的bin档测试
将ALSA_INSTALL_PATH路径下文件拷贝至arm平台相同路径下
lib 和 utils 文件系统中,以下文件必须拷贝至目标板对应位置:
-
alsa-lib的库文件
cp /customer/alsa-1.2.4/alsa_build/alsa/lib/lib* 目标板路径(/lib或其他路径,其他路径需要添加动态库搜索路径)
* 通过环境变量LD_LIBRARY_PATH添加动态库搜索路径:export LD_LIBRARY_PATH=/customer/alsa
-1.2.4/alsa_build/alsa/lib:$LD_LIBRARY_PATH
-
alsa配置文件
将$ALSA_INSTALL_PATH/alsa/etc下文件(alsa.conf,cards, pcm)拷贝至目标板完全相同的路径下:cp -r /customer/alsa-1.2.4/alsa_build/alsa/etc 目标板路径(/customer/alsa-1.2.4/alsa_build/alsa/)
将alsa-utils编译后在aplay路径下生成的bin档aplay拷贝至arm平台
注:该版本下aplay和arecord是一个文件,只要将aplay修改为arecord即可完成录音测试!
播放测试:./aplay ../../1_17/nearend.wav
录音测试:./arecord -Dhw:0,0 -r8000 -f S16_LE -c 2 ./1.wav
-l 列出声卡和数字音频设备
-D 指定音频设备PCM
-r 指定采样率
-f 指定采样格式
-c 单声道、立体声
-h 帮助
-