alsa 音訊路徑的問題:
在sound/soc/codecs目錄中有很多音訊codec的codec驅動,我使用的是wm9713,ap是s3c6410;這裡個驅動檔案中定義了很多widget和control,alsa在playback或record的時候,sound/soc/soc-dapm.c中的dapm_power_widgets函式會根據「配置情況」開啟相應的widget,搭建乙個完整的音訊路徑,只要該路徑搭建成功,就可以正常工作;
sound/soc/codecs/wm9713.c中的audio_map就是乙個wm9713的路由表,根據wm9713手冊中的audio paths overview可以選擇自己需要的音訊路徑,在audio_map中測試一下,看audio_map中是否支援這種路徑。
alsa 的配置
比如我在除錯的時候,在不用amixer控制時(預設狀態),arecord可以正確錄音,使用sound/soc/soc-dapm.c中的dump_dapm函式dump出的路徑是正確的;而aplay的時候,dump_dapm出來的路徑是錯誤的,原因是預設設定裡沒有開啟playback的開關(switch),執行如下命令即可正確playback:
alsa_amixer cset numid=4,iface=mixer,name='headphone playback switch' 1
alsa_amixer cset numid=93,iface=mixer,name='left headphone out mux' 2
alsa_amixer cset numid=34,iface=mixer,name='out3 playback switch'1
alsa_amixer cset numid=95,iface=mixer,name='left speaker out mux' 4
alsa_amixer cset numid=94,iface=mixer,name='right speaker out mux' 2
alsa_amixer cset numid=91,iface=mixer,name='out 3 mux' 2
alsa_amixer cset numid=81,iface=mixer,name='left hp mixer pcm playback swit' 1
alsa_amixer cset numid=75,iface=mixer,name='right hp mixer pcm playback swi' 1
alsa_amixer cset numid=3,iface=mixer,name='headphone playback volume' 26
alsa_amixer cset numid=36,iface=mixer,name='out3 playback volume' 48
android中alsa的配置:
andriod中使用alsa-lib,也需要對配置音訊路徑。配置方法有兩個:
1、在audiohardwarealsa.cpp中的dorouting中使用system函式呼叫amixer進行配置
system("alsa_amixer cset numid=4,iface=mixer,name='headphone playback switch' 1");
2、編寫asound.conf檔案,audiohardwarealsa.cpp中的alsamixer::alsamixer物件初始化的時候會通過alsa-lib的conf.c檔案中的函式讀取/etc/asound.conf檔案,獲取配置資訊,對codec進行配置。
alsa的一些命令
alsa_amixer該命令配置主要配置音訊codec的mixer開關、mux對路選擇、volume值等;
alsa_amixer --help
alsa_amixer contents
alsa_amixer contents
numid=30,iface=mixer,name='headphone playback zc switch'
; type=boolean,access=rw------,values=2
: values=off,off
numid=4,iface=mixer,name='headphone playback switch'
; type=boolean,access=rw------,values=2
: values=off,off
numid=3,iface=mixer,name='headphone playback volume'
; type=integer,access=rw------,values=2,min=0,max=31,step=0
: values=31,31
numid=6,iface=mixer,name='pcm playback volume'
; type=integer,access=rw------,values=2,min=0,max=31,step=0
: values=23,23
numid=5,iface=mixer,name='line in volume'
; type=integer,access=rw------,values=2,min=0,max=31,step=0
: values=23,23
numid=7,iface=mixer,name='mic 1 volume'
; type=integer,access=rw------,values=1,min=0,max=31,step=0
: values=23
numid=8,iface=mixer,name='mic 2 volume'
; type=integer,access=rw------,values=1,min=0,max=31,step=0
: values=23
numid=85,iface=mixer,name='mic a source'
; type=enumerated,access=rw------,values=1,items=3
; item #0 'mic 1'
; item #1 'mic 2 a'
; item #2 'mic 2 b'
: values=0
alsa_amixer controls
numid=30,iface=mixer,name='headphone playback zc switch'
numid=4,iface=mixer,name='headphone playback switch'
numid=3,iface=mixer,name='headphone playback volume'
numid=6,iface=mixer,name='pcm playback volume'
numid=5,iface=mixer,name='line in volume'
numid=7,iface=mixer,name='mic 1 volume'
numid=8,iface=mixer,name='mic 2 volume'
numid=85,iface=mixer,name='mic a source'
numid=84,iface=mixer,name='mic b source'
numid=9,iface=mixer,name='mic boost (+20db) switch'
numid=10,iface=mixer,name='mic headphone mixer volume'
numid=47,iface=mixer,name='aux playback headphone volume'
numid=48,iface=mixer,name='aux playback master volume'
numid=49,iface=mixer,name='aux playback mono volume'
numid=67,iface=mixer,name='mono mixer aux playback switch'
numid=69,iface=mixer,name='mono mixer bypass playback swit'
numid=70,iface=mixer,name='mono mixer mic 1 sidetone switc'
numid=71,iface=mixer,name='mono mixer mic 2 sidetone switc'
numid=65,iface=mixer,name='mono mixer pc beep playback swi'
numid=68,iface=mixer,name='mono mixer pcm playback switch'
numid=66,iface=mixer,name='mono mixer voice playback switc'
alsa_alsactl store:該命令生成/etc/asound.state檔案,該檔案顯示當請codec的狀態,可以根據該檔案檢查codec的狀態是否正確。
# cat /etc/asound.state
state.smdk6400
control.2
control.3
control.4
control.5
使用amixer命令可以參照alsa_amixer contents的內容;編寫asound.conf,可以參照alsa_alsactl生成的/etc/asound.state。
下面是我的asound.conf的一段,其它的pcm.androidplayback_***可以寫法一樣,就是hook_argsp中的內容根據自己的情況設定。
#### mixer devices
##ctl.androidplayback
ctl.androidrecord
#### playback devices
##pcm.androidplayback
hooks.0 ]}
}
ALSA 音訊概念
為了能支援2 44.1k的取樣率,系統必須支援如下的速度 圖我就不挪了 自己看原版吧 現在 alsa每秒都中斷。那麼我們每秒都需要176400byte資料準備好,才能供上乙個 雙通道 16 位 44.1k的音訊流。我們可以通過設定period size 來控制pcm中斷的產生。如果我們設定乙個16位...
alsa 音訊配置 7 16
在sound soc codecs目錄中有很多音訊codec的codec驅動 這裡個驅動檔案中定義了很多widget和control,alsa在playback或record的時候,sound soc soc dapm.c中的dapm power widgets函式會根據 配置情況 開啟相應的wid...
ALSA 音訊驅動簡要解析
alas 的驅動裝置節點 dev snd controlcx dev snd pcm c dev snd pcm p dev snd seq dev snd timer alsa驅動程式的標頭檔案 include sound asound.h include sound asound.h alsa驅...