alsa 音訊配置 7 16

2021-09-30 14:29:42 字數 3993 閱讀 2553

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