ALSA音频库移植,alsa-utils工具的使用

1.  tar -xvfalsa-lib_1.0.23.orig.tar.bz2 

(1) 配置alsa-lib
./configure --host=arm-fsl-linux-gnueabi

--prefix=/opt/ALSA/alsa_libCC=/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc

 

如有一下错误:

configure error required courses helper header not found
安装libncursesw5-dev。  apt-get install libncursesw5-dev

 

configure: error: panelw library not found
./configure加入 --with-curses=ncurses

 

/bin/bash: xmlto: command not found

安装xmlto

 

/bin/rm: cannot remove `libtoolt': No such file or directory
强制make!

 

(2)
make
make install
生成的库
alsa_lib$ ls
bin  include  lib  share
在这个文件lib下的库*.so.*是要发布到板子上去的,可以直接copy到开发板的根目录lib下

 

2.  tar -xvf alsa-utils-1.0.23.tar.bz2 
./configure --host=arm-fsl-linux-gnueabi

--prefix=/opt/ALSA/alsa_utils/

--with-alsa-inc-prefix=/opt/ALSA/alsa_lib/include/

--with-alsa-prefix=/opt/ALSA/alsa_lib/lib/

--disable-alsamixer--disable-xmlto

 

注:

--with-alsa-inc-prefix:指定头文件为alsa-lib编译出来的头文件路径

--with-alsa-prefix:指定库文件为alsa-lib编译出来的库文件路径
error:
mv: cannot stat `t-ja.gmo': No such file or directory
解决方法是下载gettext: apt-getinstall gettext

make
make install
成功以后,你会在自己的alsa-utils安装路径下的bin目录下见到生成的工具
aconnect  amidi  amixer  aplay  aplaymidi  arecord arecordmidi  aseqdump  aseqnet  iecset  speaker-test


3.把编译出来的必要文件复制到开发板
cp ALSA/alsa_lib/lib/libasound.* ./nfsdir_linux/lib/
alsa的配置文件拷贝
除了库之外alsa的配置文件也需要拷贝到目标板根文件系统中,这里需要注意的是share目录在目标板的存放位置必须和在主机的存放路径一致,比如在主机上存放在/home/david/project/S5PC100/alsa/alsa-lib,
那么我们就得把share放在目标板上的这个路径里
cp -rf share /home/nfsdir_linux/home/ALSA/alsa_lib/


alsa_utils

将alsa-utils/bin目录下的内容拷贝到目标板根文件系统中的bin下
cp bin/* /home/nfsdir_linux/bin/


4.测试
#cat /proc/asound/devices 
  0: [ 0]   : control
 16: [ 0- 0]: digital audio playback
 24: [ 0- 0]: digital audio capture
 33:        : timer
# ls -l /dev/snd/
crw-rw---- system   audio    116,  33 1970-01-0100:00 timer 定时器接口
crw-rw---- system   audio    116,   01970-01-01 00:00 controlC0 控制接口
crw-rw---- system   audio    116,  24 1970-01-0100:00 pcmC0D0c   PCM接口
crw-rw---- system   audio    116,  16 1970-01-0100:00 pcmC0D0p
如果没有snd目录则创建
播放wav文件

1、查看声卡设备            Aplay –l   

2、打开设备和调节音量

amixer -c 0 sset Master,0 80%,40% unmute cap

amixer -c 0 sset PCM,0 80%,40% unmute cap
设置第1块声卡的"Master"和“PCM”的左声道音量为80%,右声道为40%,取消静音,并设置

3、播放音乐
aplay test.wav 
Playing WAVE 'test.wav' : Unsigned 8 bit, Rate 16000 Hz, Mono
录音
 arecord -d 20 -c 2 -t wav -r 8000 -f "Signed 16 bit LittleEndian" a.wav
 以20秒的间隔(-d 20),立体声(-c 2),频率是 8000Hz来录制Wave格式音频

 //==========================================================================================

alsa-utils工具的使用 

alsa-utils包含的工具有:
alsactl, aconnect, alsamixer, amidi, amixer, aplay, aplaymidi, arecord, arecordmidi,
aseqnet, iecset, speaker-test

 

amixercontrols 

查看可以控制的选项,可以通过numid控制

amixercontents

查看声卡内容

amixercget  numid=amixercontrols 显示的)查看具体的选项

amixercset    controls中所输出的某个参数     具体的值(比如,0,1,On,Off)
 

1.alsactl
alsactl用来对alsa声卡驱动进行一些高级的设置.系统中装有多个声卡,它也可以支持.
有时在音量控制面板无法调整的选项,可以使用alsactl来实现.
alsactl可以将指定声卡的驱动程序设置信息保存到配置文件.或从配置文件中恢复指定
声卡的驱动程序的设置信息.
alsactl格式:
alsactl [options] [store|restore]
选项:
-h, --help
打印帮助信息
-f, --file
指定使用的配置文件,默认为/etc/asound.state.
Select the configuration file to use. Thedefault is
/etc/asound.state
-F, --force

与恢复命令一起使用.表示最大限度的恢复设置值.
-d, --debug
调试模式,输出更多细节信息.
-v, --version
打印alsactl版本号.
文件:
/etc/asound.state(或使用-f指定的文件)保存有声卡所有混合器的设置信息.
示例:
# rm /etc/asound.state -f
# alsactl store


 


 

2.aconnect
aconnectALSA音序器的连接管理器.用来连接或断开ALSA音序器上的端口.端口是
可以随意定义的.
,使用aconnect可以连接到任何由aseqview建立的设备端口.
命令格式:
aconnect [-d] [-options] sender receiver
aconnect -i|-o [-options]
aconnect -x

选项:
连接管理
-d, --disconnect
断开连接.
-e, --exclusive
使用独占模式连接端口.发送和接收端口将不能再与其他端口相连.
-r, --real queue
将时间包的时间戳,转换为真实时间队列的当前值.
显示端口
-i, --input
显示存在的输入端口.
-o, --output
显示存在的输出端口.
-l, --list
显示当前的连接状态.
删除连接
-x, --removeall
删除所有连接.
示例:
连接端口64:065:0:
% aconnect 64:0 65:0
这个连接是单向的,所有到发送端口64:0的数据,将被重定向到接收65:0端口.如果有另一个端口65:1,
也使用64:0作为发送端口,则数据会同时发送到2个接收端口.
端口连接时,使用:
% aconnect -d 64:0 65:0
地址也可以使用客户端的名字来代替:
% aconnect External:0 Emu8000:1
使用-i打印出输入端口信息.-o打印出输出端口信息.
% aconnect -i
client 0: ’System’ [type=kernel]
0 ’Timer ’
1 ’Announce ’
client 64: ’External MIDI-0’ [type=kernel]
0 ’MIDI 0-0 ’

可以使用-x选项来清除所有的连接.
% aconnect -x
 

 

3.alsamixer
alsamixer是一个终端界面的声卡音量调节器.如图:
命令格式:
alsamixer [options]
选项:
-h, -help
显示帮助信息.
-c
指定需要设置的声卡.默认为0.
-D
选择需要控制的调节器.
-g
设置界面颜色.
-s
最小化界面窗口.
快捷键:
进入alsamixer界面后,可以使用下面快捷键进行控制:
常规控制:
左右箭头或n,p 用来选择通道.
上下箭头或+,- 同时调整选定通道的左右声道的音量.
B,= 设置左右声道音量相同.
M 静音当前通道.分别对左,右声道静音.
空格选择录音源.在选定的通道上按"空格",可以标记此通道为录音源.此操作仅限
输入设备.插入键或";",删除键或"'"分别选定左右通道.
L 刷新屏幕.
快捷设置
PageUp 增大5格音量.
PageDown 减小5格音量.
End 设置音量为0.
分别调整左,右或整个通道的音量.
Q,W,E 增大,,通道的音量.
Z,X,C 减小,,通道的音量.
alt-q,ESC 退出.
4.amidi的使用
amidi的作用是对ALSARawMIDI端口进行读写.
amidi是一个命令行工具,允许你以独占模式向MIDI设备读/写数据.
命令格式:
amidi options
选项:
-h,-V,-l,-L 用于显示信息.
-s,-r,-S,-d 用于发送/接收数据.
-h, --help
打印帮助信息.
-V, --version
打印版本号.
-l, --list-devices
打印所有硬件MIDI端口的列表.
-L, --list-rawmidis
打印所有RawMIDI定义.
-p, --port=name
设置要使用的ALSA RawMIDI端口.若不指定,则使用声卡0的端口0.
-s, --send=filename
发送指定文件的内容到MIDI端口.文件中必须包含raw MIDI命令(.syx,.mid文件).
-r, --receive=filename
MIDI端口接收的数据写入指定文件.
-S, --send-hex="..."
发送十六进制字节到MIDI端口.
-d, --dump
MIDI端口接收数据,然后以十六进制形式打印出来.
-t, --timeout=
指定超时,当端口无数据输出达到超时时长时,将停止接收数据.
示例:
amidi -p hw:0 -s my_settings.syx
发送my_settings.syx终端MIDI命令到端口 hw:0.
amidi -S ’
发送XG复位到默认端口.
amidi -p virtual -d
建立一个虚拟RawMIDI端口,然后发送所有数据到这个端口.
 

 

5.amixer
amixer是命令行的ALSA声卡驱动调节器工具.
amixer用来在命令行控制ALSA的调节器,并且支持多声卡.
amixer不加参数时,将打印默认声卡的设置信息.
命令格式:
amixer [-c card] [cmd]
命令:
help 显示语法帮助.
info 显示调节器设备的信息.
scontrols 显示调节器器的完整列表 .
scontents 显示包含详细信息的调节器的完整列表.
set or sset ...设置调节器信息.
get or sget 显示调节器的信息.
controls 显示声卡控制器的信息.
contents 显示完整的声卡控制器信息.
cset ...设置声卡控制器信息.
cget 显示声卡控制器的信息.
选项:
[-c card]
选择指定的声卡.
[-D device]
选择需要控制的设备名.默认是 default.
-h Help
显示帮助信息.
-q
安静模式.不输出设置结果.
示例:
# amixer -c 1 sset Line,0 80%,40% unmute cap
设置第2块声卡的"line"的左声道音量为80%,右声道为40%,取消静音,并设置
它为声音源.
# amixer -c 2 cset numid=34 40%
设置第34个声卡元素为40%.

#amixer -c 0 set Headphone 30(97%)

将第一个声卡耳机音量设置为30或者97%

#amixer -c 0 get Headphone

查看第一个声卡耳机音量设置

 

6.arecord,aplay
arecord,aplay是命令行的ALSA声卡驱动的录音和播放工具.
arecord是命令行ALSA声卡驱动的录音程序.支持多种文件格式和多个声卡.
aplay是命令行播放工具,支持多种文件格式.
命令格式:
arecord [flags] [filename]
aplay [flags] [filename [filename]] ...

选项:
-h, --help
帮助.
--version
打印版本信息.
-l, --list-devices
列出全部声卡和数字音频设备.
-L, --list-pcms
列出全部PCM定义.
-D, --device=NAME
指定PCM设备名称.
-q --quiet
安静模式.
-t, --file-type TYPE
文件类型(voc,wav,rawau).
-c, --channels=#
设置通道号.
-f --format=FORMAT
设置格式.格式包括:S8 U8 S16_LE; S16_BE U16_LE
U16_BE S24_LE; S24_BE U24_LE; U24_BE; S32_LE;S32_BE; U32_LE; U32_BE
FLOAT_LE; FLOAT_BE; FLOAT64_LE; FLOAT64_BE;IEC958_SUBFRAME_LE;
IEC958_SUBFRAME_BE; MU_LAW A_LAW; IMA_ADPCM;MPEG; GSM
-r, --rate=#

设置频率.
-d, --duration=#
设置持续时间,单位为秒.
-s, --sleep-min=#
设置最小休眠时间.
-M, --mmap
mmap
.
-N, --nonblock
设置为非块模式.
-B, --buffer-time=#
缓冲持续时长.单位为微妙.
-v, --verbose
显示PCM结构和设置.
-I, --separate-channels
设置为每个通道一个单独文件.
示例:
aplay -c 1 -t raw -r 22050 -f mu_law foobar
播放raw文件foobar.22050Hz,单声道,8,mu_law格式.
arecord -d 10 -f cd -t wav -D copy foobar.wav
CD质量录制foobar.wav文件10秒钟.使用PCM"copy".
 

arecord -vv -t wav -f S16_LE -c 2 -d 10 -r 24000./record.wav

-vv 显示录音文件的信息

-t 录音文件的类型

-f 文件格式

-c 声道,2为双声道

-r 设置波特率

-d 录音时间


 

7.aplaymidi
aplaymidi用来播放标准的MIDI文件.
aplaymidi是一个命令行工具,可以在一个或多个ALSA端口上播放MIDI
文件.
命令格式:
aplaymidi -p client port[,...] [-d delay] midifile...
选项:
-h, --help
输出帮助信息.
-V, --version
输出版本信息.
-l, --list
输出可以使用的输出端口列表.
-p, --port=client port,...
设置端口.
-d, --delay=seconds
设置MIDI文件结束后,等待时长.
8.arecordmidi的使用
arecordmidi用于录制标准的MIDI文件.
arecordmidi可以从一个或多个ALSA端口上,录制一个标准MIDI文件.
命令格式:
arecordmidi -p client port[,...] [options]midifile
选项:
-h,--help
打印帮助信息.
-V,--version
打印版本号.
-l,--list
打印可以使用的输入端口.
-p,--port=client ort,...
设置端口.
-b,--bpm=beats
设置MIDI文件的速率,默认为120 BPM.
-f,--fps=frames
设置帧率.
-s,--split-channels
设置每个通道将录制成一个单独的MIDI文件.
-d,--dump
在标准输出上,以文本形式显示接受到的事件信息

 


 

9.aseqnet
aseqnetALSA调节器的网络连接工具.
aseqnetALSA调节器的客户端程序,可以从网络上发送和接收事件数据包.
网络上有主机A,主机B.A为服务器端,B为客户端.ALSA调节器系统必须同事运行
在两个服务器上.然后建立服务器端口:
hostA% aseqnet
sequencer opened: 128:0

HostB上执行:
hostB% aseqnet hostA
sequencer opened: 132:0

现在所有发送到HostA:128:0的数据将被传送到HostB:132:0,反之亦然.
命令格式:
aseqnet [remotehost]
选项:
-p port
指定TCP端口号或服务名.
-s addr
设置指定地址用于读操作.
-d addr
设置指定地址用于写操作.
-v
详细输出模式.
10.iecset的使用
设置或输出IEC958状态位.
iecset是个小工具,通过ALSAAPI,设置或输出IEC958(或称S/PDIF)状态位信息.
直接运行iecset将输出当前IEC958的状态信息. 命令格式:
iecset [options] [cmd arg...]
选项:
-D device
设置需要打开的设备名.
-c card
设置需要打开的网卡名.
-x
输出AESx字节格式的状态信息.
-i
从标准输入读取命令信息,每行一个命令.
命令:
professional
专业模式(true)或用户模式(false).
audio
音频模式(true).
rate
采样频率,单位Hz.
emphasis
设置加强值.0 = none, 1 =50/15us, 2 = CCITT.
lock
速率锁.
sbits
采样位:2 = 20bit, 4 =24bit, 6 = undefined.
wordlength
设置字长:0 = No, 2 = 22-18bit, 4 = 23-19 bit, 5 = 24-20
bit, 6 = 20-16 bit.
category

分类:值从00x7f.
copyright
设置是否包含版权.
original
原始标记:
示例:
输出当前IEC958信息.
$ iecset
Mode: consumer
Data: audio
Rate: 44100 Hz
Copyright: permitted
Emphasis: none
Category: general
Original: 1st generation
Clock: 1000 ppm

显示当前第1块声卡的IEC958状态位.
$ iecset -Dhw:0
Mode: consumer
Data: non-audio
Rate: 44100 Hz
Copyright: permitted
Emphasis: none
Category: general
Original: 1st generation
Clock: 1000 ppm

设置当前为用户模式,并打开"非音频".
$ iecset pro off audio off
Mode: consumer
Data: non-audio
Rate: 44100 Hz
Copyright: permitted
Emphasis: none
Category: general
Original: 1st generation
Clock: 1000 ppm
11.speaker-test
的使用
speaker-test是一个针对 ALSA驱动的声音测试工具.
speaker-test可以分别对左右声道进行单独的测试.
命令格式:
speaker-test [-options]
选项:
-c | --channels NUM
设置通道数目.
-D | --device NAME
设置使用的PCM设备名.
-f | --frequency FREQ
设置声音频率.
--help
输出帮助信息.
-b | --buffer TIME
设置缓冲区时长.0为使用最大的缓冲区大小.
-p | --period TIME
设置节拍为多少微秒.
-r | --rate RATE
设置音频率.
-t | --test pink|sine|wav
-t pink
表示测试时使用噪声.
-t sine 表示测试时使用音频信号声.
-t wav 表示测试时使用WAV文件.
-l | --nloops COUNT
设置测试循环的次数.
-w | --wavfile
设置测试时播放的wav文件.
-W | --wavdir
设置一个包含wav文件的目录.默认为/usr/share/sounds/alsa.
示例:
在一个音频接口上进行立体声测试
# speaker-test -Dplug:front -c2
在两个音频接口上进行4声道测试.
# speaker-test -Dplug:surround40 -c4
在立体声接口上进行5.1声道测试.
# speaker-test -Dplug:surround51 -c6
测试低音扬声器.
# speaker-test -Dplug:surround51 -c6 -s1 -f75

 

你可能感兴趣的:(嵌入式,ALSA,alsa-lib,alsa-utils,linux)