




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。2011-3-3內容:1、 簡單介紹android音頻狀態與音頻通路、codec。2、 通過ALSA的controls控制codec實現通路切換2.1、control2.2、widget2.3、audio_map2.4、 通路切換2.5、alsa_amixer瑞芯微電子手機事業首KALSA框架介紹首聶路本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。Rackchip 瑞芯做電子手機事業首K1、簡單介紹android音頻狀態與音頻通路、Icldec、聲卡注冊1 . 1、android音頻狀態與音頻
2、通路Android 的音頻通路管理主要是在AudioPolicyManager中完成的,包括音量管理,音頻策略(strategy )管理,輸入輸出設備管理。Android 音頻模式狀態圖:Android 的音頻模式狀態包括: NORMAL、IN_CALL、RINGTONE。AudioPolicyManager 的 mPhoneState成員變量記錄了當前音頻模式狀態,在音頻通路切換時的設備選擇時會使用到。在這 3種音頻模式狀態下一共有10種音頻數據流,定義如下:VOICE_CALL=0,SYSTEM=1,RING=2,MUSIC=3,ALARM=4,NOTIFICATION=5,BLUETOO
3、TH_SCO=6,本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。2本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。Android 把 10 種 stream type 歸納為 4 種路由策略,getStrategy(stream_type) 根據 stream_type ,返回對應的 routing_strategy 值,也就是返回 stream_type 對應的路由策略。中有兩個成員變量:mAvailableOutputDevices所以 android設置音頻通路時會先根據getStrategy(stream_type) 和getDev
4、iceForStrategy()函數獲取相應的輸出、輸入設備,然后通過setOutputDevice(mHardwareOutput, newDevice)的 s_route、s_open 函數控制到底層。s_open 函數用會調用 deviceName(handle, devices, mode),這個函數會根據Devices 的值來組合成字符串。然后通過snd_pcm_open 獲取 asound.conf中相應的pcm 配置里面的 controls ,并對調用到 codec驅動當中對 codec進行配置。ENFORCED_AUD 舊 LE = 7,DTMF=8,AudioPolicyMa
5、nagermAvailableInputDevices,他們記錄了當前可用的輸入和輸出設備。getDeviceForStrategy()mAvailableOutputDevices貝 U結合 routing_strategy或 mAvailableInputDevices、mPhoneState 以及,返回可用的 device。函數調用到 alsa_default.cpp 中TTS=9,手機事業部本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。3本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。例子:Music (NORMAL ) - STR
6、ATEGY_MEDIA - -AndroidPlayback_Headset_normalRing (RINGTONE ) - SONIFICATION - DEVICE_OUT_SPEAKER 和DEVICE_OUT_WIRED_HEADSET- AndroidPlayback_Speaker_Headset_ringtone瑞芯微電子手機事業首KDEVICEOUTWIREDHEADSET手機事業部本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。1.2、codecCodec 中文譯名是編譯碼器,由英文編碼器(coder )和譯碼器(decoder )兩詞的 詞頭組成
7、的縮略語。指的是數字通信中具有編碼、譯碼功能的器件。Wm8900 芯片內部框圖:Wm8900 內部包括有: ADC、DAC、Output Mixer 、Input Mixer 、Input PGA 、LINEOUT2、HPOUT 等音頻輸入口 : INPUT1、INPUT2、INPUT3、I2S_DAC音頻輸入口 : HPOUT、LINEOUT1 、LINEOUT2 、I2S_ADCCodec 輸入輸出選擇、音量控制、各個部分的power 會都會通過 control、widgets 注= 1DLT =VNEC3 b-1二VPOSS_LL INPUT?OrRINPUT2AINPUTPG As*A
8、DCggFILTERS/OLLBEDACOCHTALFIFEHSVtXUKTChargePumpHRGNDRllXTMIXER冬UMICWa-xQldg皿雖OMT0-r-r- 4dl.K3ITMAULMIDINTERFACEAUXLCOMCPGNDLINEOUT1LLINEOUT2L+ D 47uFHF1M.LINPUT1。RJNPUT1 UNE0UT1RMMiujdtaonHPINR=J= 047UFA_IUNEOUT2RADCCONTROLINTERFACE本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。冊到不同的 list中供 ALSA 和用戶使用。手機事業部本
9、文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。2、通過ALSA的controls控制codec實!路切換2.1、controlCodec 中會把一部分功能的設置信息,以 control 的形式通過snd_soc_add_controls函數添加到聲卡中,我們可以通過asound.conf 去控制這些control如:SOC_SINGLE(Left Input PGA Switch, WM8900_REG_LINVOL, 6, 1, 1),#define SOC_SINGLE(xname, reg, shift, max, invert) .iface = SNDRV_
10、CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,.put = snd_soc_put_volsw, .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) (1 ) iface 字段定義了 control 的類型,形式為 SNDRV_CTL_ELEM_IFACE_XXX ,通 常是 MIXER(2)name 是名稱標識字符串,control的名稱非常重要, 因為 control的作用由名稱來區分。nam
11、e 定義的標準是 “SOURCE DIRECTION FUNCTION即源、方向、功能”。(3)info函數可以得到對應 control的詳細信息。(4)get()函數用于得到 control 的目前值并返回用戶空間。(5)put()函數用于從用戶空間寫入值,如果值被改變,該函數返回1 ,否則返回 0;如果 發生錯誤,該函數返回錯誤碼。(6)private_value保存了改control用于設置codec的詳細信息。 這些也就是與 codec直接相關的信息。瑞芯微電子手機事業首K本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。reg表示寄存器地址;shift 表示數
12、據偏移量;max 表示數據最大值;invert 表示是否倒置。所有的 control 都是通過snd_soc_add_controls(codec,wm8900_snd_controls, ARRAY_SIZE(wm8900_snd_controls)函數添加到聲卡本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。2.2、widgetWidget 可以認為是 codec內部各個部件,需要根據 audio_map 對應的 path來調用。Widget 的管理和控制都是在 soc-dapm.c 中去實現的。通過 snd_soc_dapm_new_controlsSND_SO
13、C_DAPM_PGA(LINEOUT1L PGA”, WM8900_REG_POWER2, 8, 0, NULL, 0),SND_SOC_DAPM_PGA 會直接才巴 widget 對應的信息添加到codec-dapm_widgets中,包括 id、reg、shift、max 等。id用來區分不同的 widget 類型,不同的 id控制方式 也不同。codec 通過 snd_soc_add_controls 和 wm8900_add_widgets兩個函數把來添加 control 、widgets 到不同的 list 里。wm8900_add_widgets 中除了把 wm8900_dapm_
14、widgets結構體里面的所有widgets 信息添加至 U list 里,還通過 snd_soc_dapm_add_routes函數才巴 audio_map里的信息添加到 list里。瑞芯微電子手機事業首K函數添加至1 codec-dapm_widgets中手機事業部本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。重點說下 audio_map ,因為 audio_map是一個幫助我們切換通路的很重要的部分。我們可以根據 audio_map 來控制 codec 實現通路而不用去了解 codec 具體內部需要怎么配置寄存器來實現連接。這樣就可以不用怎么去了解codec
15、芯片。audio_map 的類型 snd_soc_dapm_route定義為:struct snd_soc_dapm_route (const char *sink;const char *control;const char *source;可以理解為:目的地,控制條件,源頭。Codec的通路(連接方式)非常多,以 WM8900 為例舉個例子。從 HP_L輸出(目 的地 sink )的信號可能來自 MIC、DAC (源頭 source ),而這個取決于 codec的配置(控 制條件 control )。每個通路在 codec內部又被分成了好幾個部分,也就是前面說到的widgets ,每個wi
16、dget 都可以做為一個數據流的源頭或者目的地。這些 widgets 可能的 path都在 audio_map 羅列出來了。如下是 WM8900 一部分 audio_map :/* Outputs */LINEOUT1L”, NULL, LINEOUT1L PGA,(LINEOUT1L PGA, NULL, Left Output Mixer,LINEOUT1R, NULL, LINEOUT1R PGA,LINEOUT1R PGA, NULL, Right Output Mixer,瑞芯微電子2.3、audio_map2.3.1 、audio_map 介紹手機事業部本文檔為瑞芯微電子手機事業部
17、成員撰寫及提供,不得用于工作之外的使用及交流。8本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。Rackchip 瑞芯微電子手機事業首K(LINEOUT2L PGA”, NULL, Left Output Mixer, (LINEOUT2 LP, Disabled, LINEOUT2L PGA,(LINEOUT2 LP, Enabled, Left Output Mixer,(LINEOUT2L, NULL, LINEOUT2 LP,(LINEOUT2R PGA, NULL, Right Output Mixer, (LINEOUT2 LP, Disabled, LI
18、NEOUT2R PGA,(LINEOUT2 LP, Enabled, Right Output Mixer, (LINEOUT2R, NULL, LINEOUT2 LP,(Left Output Mixer, LINPUT3 Bypass Switch, LINPUT3,(Left Output Mixer, AUX Bypass Switch, AUX,(Left Output Mixer, Left Input Mixer Switch, Left Input Mixer,(Left Output Mixer, Right Input Mixer Switch, Right Input M
19、ixer,(Left Output Mixer, DACL Switch, DACL,(Right Output Mixer, RINPUT3 Bypass Switch, RINPUT3,(Right Output Mixer, AUX Bypass Switch, AUX,(Right Output Mixer, Left Input Mixer Switch, Left Input Mixer,(Right Output Mixer, Right Input Mixer Switch, Right Inp ut Mixer,(Right Output Mixer, DACR Switch
20、, DACR,(Headphone Amplifier, NULL, LINEOUT2 LP,(Headphone Amplifier, NULL, LINEOUT2 LP,(HP_L, NULL, Headphone Amplifier,(HP_R, NULL, Headphone Amplifier,從 audio_map 中可以看出,對于 LINEOUT2 LP,可以是 Headphone Amplifier 的 source,也可以是 LeftOutput Mixer 的 sink。本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。對于每一個 sink,都有可能
21、有好幾個source,也就是 codec 中一個節點(widget )可能有好幾個其他節點 (widgets )可以連接到這個節點, 如 Left Output Mixer 在 audio_map作為 sink 的情況包括:Left Output Mixer, LINPUT3 Bypass Switch, LINPUT3,Left Output Mixer, AUX Bypass Switch, AUX,Left Output Mixer, Left Input Mixer Switch, Left Input Mixer,Left Output Mixer, Right Input Mixe
22、r Switch, Right Input Mixer,Left Output Mixer, DACL Switch, DACL,這個時候 audio_map 的 control 就起了作用。目前我遇到的 control 只有三種情況,這個 也是和 widget的添加定義有關,也可以說是與 id有,不同 id 對應 path中的 control 不 同:(1 )、NULL如:Headphone Amplifier, NULL, LINEOUT2 LP,這個時候這個只要 LINEOUT2 LP 作為 sink 時的 path 以及 Headphone Amplifier 作為 source 時的
23、 path是連接的狀態,那么這個 path就自動連接起來。也就是 ALSA 中會先 判斷當前 path 的下游 path和上游 path是否已經連接。所以,在設置通路時,有這寫 path 是要在所有 path 都連通的狀態下才會全部都自動連接。具體實現如果想了解可以看soc-dapm.c 中的 static int dapm_power_widgets(structsnd_soc_codec *codec, int event)函數。(2) 、字符串, source 與 switch 組合而成。如:Left Output Mixer, DACL Switch, DACL,10本文檔為瑞芯微電子
24、手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。對于這中情況,在 audio_map 添加到 list里時會處理成新的control添加到 ALSA中,我們可以通過 alsa_amixer命令看到這個 control的存在:numid=58,iface=MIXER,name=Left Output Mixer DACL Switch控制這個 control時參數填入 on 或者 off就可以打開和關閉這個path。(3) 、字符串,與 source 的字符串沒有關系。如:LINEOUT2 LP, Enabled, Left Output Mixer,那么這個時候只有當LINEOUT2
25、LP 對應的 control命令設置為Enabled ,這樣兩個widgets 就連接起來了。所以我們要配置 codec 通路,實際上就是要根據每個codec的 audio_map 來控制 ALSAcontrols瑞芯微電子手機事業首K本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。11手機事業部本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。2.4、通路切換播放音樂通路路徑圖:RK29_I2S - DAC - OUT MIXER - LINEOUT2 - HPOUT要配置 WM8900 到播放音樂通路,那么我們就要知道 WM8900播放音樂
26、是的輸入口和輸出口。播放音樂使用的是 I2S信號,所以輸入口就是I2S的 DAC,從芯片配合 SDK電路我們可以知道輸出口是 HP_L與 HP_R。(1 ) 、先看 DACL,從 audio_map 中我們可以看出。以 DACL 為源頭的 path 只有 Left Output Mixer。Left Output Mixer, DACL Switch, DACL,1llF1-10UF -10uFDCOD IDBVDD CPVDDHII CPVrDDLO_ n_ a_a_n_1VNEGVPOS S/-15 R日CPGNDLINE0UT1LLINE0UT2L:-IL471FHPINLHDLHPGN
27、DHPRHPINR=0.47uFLINEOUT 1RIADCREFDACREFUNEOUT2R-15IDMEgliMFILTERSVOLUMEI(GI1AL:T-、- =WI339 SIMS-15 h3 -WELEFTmix ERChargePumpRIGHTMIXERDIGITALAUDIOINTERFACE18呂650S I. 1- S5 jiCONTROLINTERFACE-?S-?S_E_E -oldyCQwu-oldyCQwu W W3W3WhFGND瑞芯微電子手機事業部本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。12本文檔為瑞芯微電子手機事業部成員撰寫
28、及提供,不得用于工作之外的使用及交流。作為源頭,可以與之相連的widgets 有一下三個:(LINEOUT1L PGA”, NULL, Left Output Mixer,(LINEOUT2L PGA, NULL, Left Output Mixer,(LINEOUT2 LP, Enabled, Left Output Mixer,即可以至 V LINEOUT1L PGA 、 LINEOUT2L PGA 、 LINEOUT2 LP(3)、同時,從 audio_map 中的下面列出的部分我們可以知道,要到 HP_LLINEOUT2 LP。(Headphone Amplifier, NULL, L
29、INEOUT2 LP,(Headphone Amplifier, NULL, LINEOUT2 LP,(HP_L, NULL, Headphone Amplifier,(HP_R, NULL, Headphone Amplifier,(4)、所以播放音樂的路徑就確認了:DACL- Left Output Mixer -LINEOUT2 LP- Headphone Amplifier- HP_L(5)、路徑的實現過程中,只有兩個 path需要設置:(LINEOUT2 LP, Enabled, Left Output Mixer,(Left Output Mixer, DACL Switch, D
30、ACL,所以這部分在 asound.conf 中對應的控制:(name LINEOUT2 LPvalue Enabled(name Left Output Mixer DACL Switchvalue on13Rackchip 瑞芯微電子手機事業首K(2)、Left Output Mixer只能通過本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。name Right Output Mixer DACR Switchvalue on(6) 、音量等的設置。通過前面幾個步驟,codec 的路徑就已經打通了,但是可能某些 widgets 初始音量值是mute或者增益非常小導
31、致聽不到聲音。另外在 ADC 和 DAC 部分有可能會選擇輸入、輸 出是左右聲道的選擇也要注意。所以在配置過程中要注意由snd_soc_add_controls函數添加到 list的 control 命令了。對于 WM8900 的播放音樂通路,還需要設置:numid=26,iface=MIXER,name=Digital Playback Volume所以綜上所述,配置 WM8900 播放音樂通路 pcm.AndroidPlayback_Speaker_normal如下:pcm.AndroidPlayback_ Headset _normal type hooksslave.pcm type
32、hwcard 0device 0 # Must be of type digital audio playbackhooks.0 type ctl_elemshook_args 14本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。name Right DAC Sourcevalue Right(name LINEOUT2 LPvalue Enabled(name Left Output Mixer DACL Switchvalue on(name Right Output Mixer DACR Switch value on(name Digital Playback
33、 Volumevalue.0 85value.1 8515本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。alsa_amixer命令:該命令配置王要配置首頻codec 的 mixer 開關、mux 對路選擇、volume 值等;# alsa_amixer -helpUsage: amixer commandAvailable options:-h,-helpthis help-c,-card Nselect the card-D,-device Nselect the device, default default-d,-debugdebug mode-n,-noch
34、eckdo not perform range checking-v,-versionprint version of this program-q,-quietbe quiet-i,-inactive show also inactive controls-a,-abstract L select abstraction level (none or basic)-s,-stdinRead and execute commands from stdin sequentiallyAvailable commands:scontrolsshow all mixer simple controls
35、scontentsshow contents of all mixer simple controls (defaultcommand)sset sID Pset contents for one mixer simple controlsget sIDget contents for one mixer simple controlcontrolsshow all controls for given cardcontentsshow contents of all controls for given cardcset cID Pset control contents for one c
36、ontrolcget cIDget control contents for one control16本文檔為瑞芯微電子手機事業部成員撰寫及提供,不得用于工作之外的使用及交流。由于在配置 wm8900 過程中我只用到了alsa_amixer controls 、alsa_amixeralsa_amixer cset、alsa_amixer cget ,所以下面我就介紹一下這四個命令的使用,另 外也順便提下alsa_alsactl。2.5.1、alsa_amixer controls:使用 alsa_amixer controls 可以列出當前 alsa 里面添加的 controls的簡單信息。如(具體可以看 alsa_amixer controls.txt ):numid=59,iface=MIXER,name=LINEOUT2 LP每個 controls 對應一個 numid,至于 numid 的排序應該和添加的時候有關系吧。2.5.2、alsa_amixer :通過 alsa_amixer 命令,會列出,所有 controls對應的詳細信息。例 1 (具體可以看 alsa_amixer.txt ):Simple mixer control LINEOUT2 LP,0Capab
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃店鋪的殘疾人士服務考核試卷
- 鑄造過程中的質量管理方法創新與實踐案例分析考核試卷
- 銀礦市場動態監測與投資決策分析考核試卷
- 過敏性休克病人急救護理
- 呼吸道疾病預防及措施
- 院前急救的常見護理技術
- 機場應急救援淺析課件
- 影像學呼吸系統概述
- 外科手部護理標準流程
- 感染控制管理規范實施框架
- 叉車司機理論知識考試復習題庫(必會500題)
- 常州保安證考試題及答案
- 《化工和危險化學品生產經營單位重大生產安全事故隱患判定標準》解讀與培訓
- 《合理用藥安全教育》課件
- 優化能源消耗的綠色IT部署戰略規劃
- 2025年上半年內蒙古包頭市市直事業單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年度人工智能產業投資基金入股協議4篇
- 4.2.2光柵傳感器測量位移
- 2025年華遠陸港集團所屬華遠陸港網絡貨運(山西)限公司招聘(72人)管理單位筆試遴選500模擬題附帶答案詳解
- T-CCIASD 10012-2024 ISO 標準集裝箱用水性涂料
- 國家開放大學《金融學》機考題庫
評論
0/150
提交評論