ALSA各檔案作用

來源:互聯網
上載者:User

sound/core/pcm_native.c 對下層的PCM驅動提供封裝,為上層提供統一的介面,snd_pcm_f_ops_playback檔案操作結構提供播放功能的函數,snd_pcm_f_ops_capture檔案操作結構提供錄音功能的函數。


sound/core/control.c對下層的Control驅動提供封裝,為上層提供統一的介面,snd_ctl_f_ops檔案操作結構提供控制功能函數,其中主要是snd_ctl_ioctl函數。


播放的過程大致如下:
Snd_pcm_f_ops_playback.write即snd_pcm_write調用snd_pcm_lib_write
snd_pcm_lib_write調用Snd_pcm_lib_write1
Snd_pcm_lib_write1通過snd_pcm_lib_write_transfer把資料寫入DMA buffer中,然後調用snd_pcm_start開始DMA傳輸資料到WM9713裡去。

錄音的過程大致如下:
Snd_pcm_f_ops_capture.read即snd_pcm_read調用snd_pcm_lib_read
snd_pcm_lib_read調用snd_pcm_lib_read1
snd_pcm_lib_read1調用snd_pcm_start從WM9713傳輸資料到DMA記憶體中,然後調用snd_pcm_lib_read_transfer拷貝資料到使用者的buffer.


Control介面主要讓使用者空間的應用程式(alsa-lib)可以訪問和控制音頻codec晶片中的多路開關,滑動控制項等。對於Mixer(混音)來說,Control介面顯得尤為重要,從ALSA 0.9.x版本開始,所有的mixer工作都是通過control介面的API來實現的。

Controls的定義 

要自訂一個Control,我們首先要定義3個回呼函數:info,get和put。然後,定義一個snd_kcontrol_new結構: [c-sharp]  view plain copy static struct snd_kcontrol_new my_control __devinitdata = {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER,  //control的類型     .name = "PCM Playback Switch",  //control的名字。因為control的作用是按名字來歸類的。ALSA已經預定義了一些control的名字。     .index = 0,  //儲存該control的在該卡中的編號     .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,  //該control的訪問類型     .private_value = 0xffff,  //包含了一個任意的長整數類型值。該值可以通過info,get,put這幾個回呼函數訪問。     .info = my_control_info,  //用於擷取control的詳細資料,alsa已經為我們實現了一些通用的info回呼函數     .get = my_control_get,       .put = my_control_put   };  
Control裝置和PCM裝置一樣,都屬於音效卡下的邏輯裝置。使用者空間的應用程式通過alsa-lib訪問該Control裝置,讀取或控制control的控制狀態,從而達到控制音頻Codec進行各種Mixer等控制操作。 





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.