在sound/soc/codecs目錄中有很多音訊codec的codec驅動;這裡個驅動檔案中定義了很多widget和control,alsa在playback或record的時候,sound/soc/soc-dapm.c中的dapm_power_widgets函式會根據「配置情況」開啟相應的widget,搭建乙個完整的音訊路徑,只要該路徑搭建成功,就可以正常工作;
sound/soc/codecs/ xx.c audio_map就是乙個的路由表,根據手冊中的audio paths overview可以選擇自己需要的音訊路徑,在audio_map中測試一下,看audio_map中是否支援這種路徑。
alsa 的配置
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 音訊驅動簡要解析
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驅...
alsa 音訊路徑的問題
alsa 音訊路徑的問題 在sound soc codecs目錄中有很多音訊codec的codec驅動,我使用的是wm9713,ap是s3c6410 這裡個驅動檔案中定義了很多widget和control,alsa在playback或record的時候,sound soc soc dapm.c中的d...