聲音子系統

簡介FreeBSD聲音子系統清晰地將通用聲音處理問題與設備特定的問題分離開來。這使得更容易加入對新設備的支持。

基本介紹

  • 中文名:聲音子系統
  • 外文名:無
  • 釋義:用聲音處理問題與設備特定的問題
  • 特點:多媒體應用程式不加修改地移植
  • 定義:數位化聲音和混音器函式的系統
主要組件,不同點,

主要組件

框架是聲音子系統的中心部分。它主要實現下面的組件:
一個到數位化聲音和混音器函式的系統調用接口(read, write, ioctls)。ioctl命令集合兼容老的OSS 或Voxware接口,允許一般多媒體應用程式 不加修改地移植。處理聲音數據的公共代碼(格式轉換,虛擬通道)。一個統一的軟體接口,與硬體特定的音頻接口模組接口對某些通用硬體接口(ac97)或共享的硬體特定代碼 (例如:ISA DMA例程)的額外支持。對特定音效卡的支持是通過硬體特定的驅動程式來實現的,這些驅動程式提供通道和混音器接口,插入到通用pcm代碼中。
本章中,術語pcm將指聲音驅動程式的中心,通用部分,這是對比硬體特定的模組而言的。
預期的驅動程式編寫者當然希望從現有模組開始,並使用那些代碼作為最終參考。但是,由於聲音代碼十分簡潔漂亮,這也基本上免除了注釋。本文檔試圖給出框架接口的一個概覽,並回答改寫現有代碼時可能出現的 一些問題.
聲音驅動程式使用與任何硬體驅動程式模組相同的方法探測和連線(設備)。你可能希望瀏覽一下手冊中ISAPCI章節的內容來獲取更多信息。

不同點

然而,聲音驅動程式在某些方面又有些不同:
他們將自己聲明為pcm類設備,帶有一個 設備私有結構struct snddev_info: static driver_t xxx_driver = { "pcm", xxx_methods, sizeof(struct snddev_info) }; DRIVER_MODULE(snd_xxxpci, pci, xxx_driver, pcm_devclass, 0, 0); MODULE_DEPEND(snd_xxxpci, snd_pcm, PCM_MINVER, PCM_PREFVER,PCM_MAXVER);大多數聲音驅動程式需要存儲關於其設備的附加私有信息。私有數據結構通常在連線例程中分配。其地址通過調用 pcm_register()和 mixer_init()傳遞給 pcm。後面pcm 將此地址作為調用聲音驅動程式接口時的參數傳遞回來。聲音驅動程式的連線例程應當通過調用mixer_init() 向pcm聲明它的MIXER或AC97 接口。對於MIXER接口,這會接著引起調用 xxxmixer_init()。聲音驅動程式的連線例程通過調用 pcm_register(dev, sc, nplay, nrec) 向pcm聲明其通用CHANNEL配置,其中 sc是設備數據結構的地址, 在pcm以後的調用中將會用到它, nplay和nrec是播放和錄音通道的數目。聲音驅動程式的連線例程通過調用 pcm_addchan()聲明它的每個通道對象。這會在 pcm中建立起通道合成,並接著會引起調用 xxxchannel_init() (譯註:請參考原文)。聲音驅動程式的分離例程在釋放其資源之前應當調用 pcm_unregister()。有兩種可能的方法來處理非PnP設備:
使用device_identify()方法 (範例:sound/isa/es1888.c)。 device_identify()方法在已知地址探測硬體,如果發現支持的設備就會創建一個新的pcm設備,這個pcm設備接著 會被傳遞到probe/attach。使用定製核心配置的方法,為pcm設備設定適當的hints(範例: sound/isa/mss.c)。pcm驅動程式應當實現 device_suspend, device_resume和 device_shutdown例程,這樣電源管理和模組卸載就能正確地發揮作用。

相關詞條

熱門詞條

聯絡我們