alsa 音訊路徑的問題

2021-07-16 07:53:08 字數 4899 閱讀 5024

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驅...