ALSA音訊工具amixer,aplay,arecord

ALSA音訊工具編譯安裝

========================================================================
1.
官網http://www.alsa-project.org下載alsa-lib和alsa-utils
我的版本:alsa-lib-1.0.27.2.tar.bz2 和alsa-utils-1.0.27.2.tar.bz2
2.創建/home/m/3rd/alsa目錄,並在目錄下創建install目錄,接著把壓縮包拷到alsa目錄下
3.編譯alsa-lib步驟
tar -xvf alsa-lib-1.0.27.2.tar.bz2  
cd alsa-lib-1.0.27.2 
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux  --prefix=/home/m/3rd/alsa/install/ 
make 
make install
4.編譯alsa-utils步驟
tar -xvf alsa-utils-1.0.27.2.tar.bz2 
cd alsa-utils-1.0.27.2 
CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/m/3rd/alsa/install/ --host=arm-linux --with-alsa-inc-prefix=/home/m/3rd/alsa/install/include --with-alsa-prefix=/home/m/3rd/alsa/install/lib --disable-alsamixer --disable-xmlto --disable-nls 
make 
5.簡單說明
--prefix指定了alsa-lib編譯後的安裝目錄,包含庫和標頭檔,編譯alsa-utils時候要指明它的庫lib和標頭檔include的目錄.
alsamixer是圖形化的amixer工具,需要ncurses的支援,在secure CRT中亂碼,怕麻煩用--disable-alsamixer禁用了它.
--disable-xmlto和--disable-nls去掉編譯都不通過,沒去研究為啥.
aplay和arecord是同一個東東改下名字就可以了

 

if (strstr(argv[0], "arecord")) { 

    stream = SND_PCM_STREAM_CAPTURE; 

    file_type = FORMAT_WAVE; 

    command = "arecord"

    start_delay = 1

    direction = stdout; 

} else if (strstr(argv[0], "aplay")) { 

    stream = SND_PCM_STREAM_PLAYBACK; 

    command = "aplay"

    direction = stdin; 

} else

    error(_("command should be named either arecord or aplay")); 

    return 1

 

========================================================================

聲音錄製

======================================================================

arecord説明提示資訊

 

arecord -l列出音效卡和數位音訊設備

 

-D參數用於指定音訊設備PCM
以hwx,x開頭
根據上面l列出的設備,如果選擇tvp5158來錄製聲音的話那麼pcm設備就位hw0,0,如果是tlv320aic3x則pcm設備為hw0,1,sii9135則pcm設備為hw0,2。
音效卡號,設備號
-r指定採樣頻率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000
-f指定採樣格式上面列出了:cd/cdr/dat/S16_LE/S32_LE/...

arecord -D default:CARD=mcasp0 -d 100000   -f cd -t raw mysong15.raw
arecord -D default:CARD=mcasp0 -d 100000   -f dat -t raw mysong10.raw
arecord -D default:CARD=mcasp0 -d 100000   -f S16_LE -r 16000 -t raw mysong10.raw
arecord -Dhw:0,1 -r8000 -f cd /a/1.wmv
arecord -Dhw:0,0 -r8000 -f S16_LE -c 2 /a/1.wmv 
arecord -Dhw:0,2 -r48000 -f S32_LE -c 2 /a/1.wmv 

========================================================================

聲音播放

========================================================================
aplay
説明提示資訊和aplay -l 列出音效卡和數位音訊設備


-D參數用於指定音訊設備PCM
以hwx,x開頭
根據上面l列出的設備,如果選擇tlv320aic3x來播放聲音的話那麼pcm設備就位hw0,1,如果是hdmi則pcm設備為hw0,0。
音效卡號,設備號
-r指定採樣頻率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000
-f指定採樣格式上面列出了:cd/cdr/dat/S16_LE/S32_LE/...

aplay -Dhw:0,1 -r8000 -f cd /a/1.wmv 
aplay -Dhw:0,1 -r48000 -f cd /a/1.wmv

arecord -Dhw:0,2 -r48000 -f S32_LE -c 2 | aplay -Dhw:0,1 -r48000//一邊採集一邊播放
========================================================================

簡述amixer及其用法
alsamixer是Linux 音訊架構ALSA中的Alsa工具的其中一個,用於配置音訊的各個參數。
alsamixer是基於文本下的圖形介面的,可以通過鍵盤的上下鍵,左右鍵等,很方便地設置需要的音量,開關某個switch(開關)等等操作。
amixer,是alsamixer的文字模式,即命令列模式,需要用amixer命令的形式去配置你的音效卡的各個選項。
對於amixer的使用,你首先需要搞懂你要設置的參數是哪些,然後才可能去瞭解,如何去配置對應的值,整體來說,相對alsamixer來說,是有點繁瑣,下面簡要介紹其具體用法:

1.查看amixer支援的命令

===================================================================
amixer -h

2.查看可使用的介面

===================================================================
再看看當前你的音訊系統(不同的音訊驅動對應不同的內容和操作介面)提供了那些供你使用的介面去操作
關於驅動裡面已經提供了多少介面可以去操作,可以用命令:
amixer contents

查看,比如:

 

========================================================================
3.
如何去設置某個參數

 

設定音量 要選音效卡

Amixer c 1 set Master 80%,80%

 

 

========================================================================
總結起來就是,先要用get系列命令去看懂有哪些介面,然後再去用set系列的命令,去設置對應你所要設置的值。

查看獲取某個設置項的值用amixer cget  +控制參數
根據控制參數類型設置控制參數使用amixer cset +控制參數+" "+參數

想要針對某項設置,比如想要設置上面的的主音量,master volume,即controls中顯示的:
numid=5,iface=MIXER,name=’PCM Volume’
那麼,可以先看看當前的值:
# amixer cget numid=5,iface=MIXER,name=’PCM Volume’
numid=5,iface=MIXER,name=’PCM Volume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0
顯示的是最大的27,假設想要設置為25,那麼就用cset去設置:
# amixer cset numid=5,iface=MIXER,name=’PCM Volume’ 25
numid=5,iface=MIXER,name=’PCM Volume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=25,25
| dBscale-min=-40.50dB,step=1.50dB,mute=0

再比如,去將’Mic Supply 的switch關閉:
# amixer cset numid=12,iface=MIXER,name=’Mic Supply Switch’ Off
numid=12,iface=MIXER,name=’Mic Supply Switch’
; type=ENUMERATED,access=rw——,values=1,items=2
; Item #0 ‘On’
; Item #1 ‘Off’
: values=1

總結一下用法,就是:
amixer cget    controls
中所輸出的某個參數
amixer cset    controls中所輸出的某個參數      具體的值(比如,0,1,On,Off等)

【提示】
同上面介紹的的cget/cset
系列命令:
controls        show all controls for given card
contents        show contents of all controls for given card
cset cID P      set control contents for one control
cget cID        get control contents for one control

類似的,還有另外一套sget/sset系列的命令:
scontrols       show all mixer simple controls
scontents       show contents of all mixer simple controls (default command)
sset sID P      set contents for one mixer simple control
sget sID        get contents for one mixer simple control
也是同樣做法,比如:
通過查看當然有哪些選擇可以控制:
# amixer scontrols
Simple mixer control ‘Master’,0
Simple mixer control ‘Master Mode’,0
Simple mixer control ‘Master Mux’,0
Simple mixer control ‘Master Quality’,0
。。。

同理,amixer scontents,可以查看當前所有的值,具體就不在這列舉了。
另外,去查看或者配置用sget,比如:
# amixer sget ‘Microphone Input’,0
Simple mixer control ‘Microphone Input’,0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]

如果想要修改對應設置,用amixer sset ,具體用法是:
amixer sset sID(控制字串) P(支援的某個值)
其中sID,就是上面的Simple mixer control後面的那個字串,比如’Master Mux’,0
而對其設置就是,先看看其提供了哪些供你設置的值:
# amixer sget ‘Master Mux’,0
Simple mixer control ‘Master Mux’,0
Capabilities: enum
Items: ‘Sum’ ‘DAC’ ‘Line’ ‘Mic’
Item0: ‘DAC’
然後比如要設置成Line的,就可以這樣:
# amixer sset ‘Master Mux’,0 Line
Simple mixer control ‘Master Mux’,0
Capabilities: enum
Items: ‘Sum’ ‘DAC’ ‘Line’ ‘Mic’
Item0: ‘Line’

=======================================================================

amixer設置音量:
=======================================================================
1.
設置音效卡0左聲道音量為200
amixer cset numid=6,iface=MIXER,name='L ADC VOLUME' 200
2.獲取音效卡0左聲道音量值
root@dvr:~# amixer cget numid=6,iface=MIXER,name='L ADC VOLUME'
numid=6,iface=MIXER,name='L ADC VOLUME'
  ; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
  : values=200
3.設置音效卡0右聲道音量為200
amixer cset numid=5,iface=MIXER,name='PCM Volume' 200
4.獲取音效卡0右聲道音量值值
root@dvr:~# amixer cget numid=5,iface=MIXER,name='PCM Volume'
numid=5,iface=MIXER,name='R ADC VOLUME'
  ; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
  : values=200
5.設置音效卡1右聲道音量為200
amixer -c 1 cset numid=5,iface=MIXER,name='PCM Volume' 200
6.獲取音效卡1右聲道音量值
root@dvr:~# amixer -c 1 cget numid=5,iface=MIXER,name='PCM Volume'
numid=5,iface=MIXER,name='R ADC VOLUME'
  ; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
  : values=200
7.設置音效卡1左聲道音量為200
amixer -c 1 cset numid=6,iface=MIXER,name='L ADC VOLUME' 200
8.獲取音效卡1左聲道音量值
root@dvr:~# amixer -c 1 cget numid=6,iface=MIXER,name='L ADC VOLUME'
numid=6,iface=MIXER,name='L ADC VOLUME'
  ; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
  : values=200
========================================================================

    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()