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
aconnect
ALSA音序器的連接管理器.用來連接或斷開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
aseqnet
ALSA調節器的網絡連接工具.
aseqnet
ALSA調節器的客戶端程序,可以從網絡上發送和接收事件數據包.
網絡上有主機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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章