五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

openKylin系統(tǒng)音頻大體框架介紹

2023-03-17 09:21 作者:魚餌網(wǎng)絡(luò)  | 我要投稿

在桌面操作系統(tǒng)中,音頻是至關(guān)重要的一環(huán),音頻的穩(wěn)定支持直接決定了用戶的聽感以及使用體驗(yàn),今天我們就給大家介紹openKylin桌面操作系統(tǒng)背后關(guān)于音頻的那些故事。

先看一張框架圖,這張圖大致介紹了openKylin操作系統(tǒng)音頻的框架組成,層次從下往上依次遞增:


01框架各層次關(guān)系

在UKUI桌面環(huán)境中,聲音(ukui-media)主要用來控制系統(tǒng)的輸入輸出音量。ukui-media使用pulseaudio-lib 和 alsa-lib庫來獲取一系列的輸入輸出設(shè)備,以及控制相應(yīng)輸入輸出設(shè)備的音量。

openKylin系統(tǒng)使用pulseaudio聲音服務(wù)器來作為操作系統(tǒng)和alsa的通信媒介,pulseaudio聲音服務(wù)器介于應(yīng)用程序和聲卡驅(qū)動之間。當(dāng)不同的應(yīng)用調(diào)用聲音服務(wù)器的API來播放聲音時,它們把音頻數(shù)據(jù)送到服務(wù)器, 服務(wù)器將一個以上的播放請求混音后,再發(fā)送給底層的聲卡驅(qū)動(ALSA或OSS)。由ALSA或OSS來驅(qū)動聲卡播放混音后的數(shù)據(jù)。

02各層次詳細(xì)介紹

1、ukui-media

ukui-media的界面如下圖所示,其可以對系統(tǒng)聲音進(jìn)行圖形化控制。


聲音托盤中會顯示可用的輸出設(shè)備,點(diǎn)開“聲音設(shè)置”字樣,我們會進(jìn)入更全面的聲音設(shè)置界面。




其功能有:

1、可以選擇可用的輸入輸出設(shè)備

2、改變可用的輸入輸出設(shè)備音量

3、輸出設(shè)備聲道平衡功能

4、輸入設(shè)備降噪功能

5、設(shè)置對應(yīng)系統(tǒng)功能的提示音音效

關(guān)于以上功能的實(shí)現(xiàn),其中的底層邏輯就涉及到接下來要講的 pulseaudio 層。

2、PulseAudio層

ukui-media 的實(shí)現(xiàn),其主要是調(diào)用了 pulseaudio-lib 庫。PulseAudio是一個聲音服務(wù)器,也是一個后臺進(jìn)程,其從一個或多個音源(進(jìn)程或輸入設(shè)備)接受聲音輸入,然后重定向到一個或多個槽(聲卡,網(wǎng)絡(luò)音頻支持,或其他進(jìn)程)。

其主要功能有:

1、可對每一個應(yīng)用程序進(jìn)行音量控制

2、可擴(kuò)展的插件與支持可裝載模塊架構(gòu)

3、兼容性許多流行的音頻應(yīng)用程序

4、支持多重音源和多重輸出

5、低延時操作和支持延遲測量

6、一個對處理器資源效率零拷貝內(nèi)存架構(gòu)

7、能夠發(fā)現(xiàn)本地網(wǎng)絡(luò)上使用PulseAudio的其他計(jì)算機(jī)并通過其揚(yáng)聲器直接播放聲音

8、能夠改變一個應(yīng)用程序的聲音輸出設(shè)備,就算這個應(yīng)用程序在播放聲音(程序不需要支持這特性,而事實(shí)上,程序甚至沒有意識到改變)

9、帶有腳本功能的命令行界面

10、一個功能完善且?guī)в忻钚兄匦屡渲霉δ艿氖刈o(hù)進(jìn)程

11、內(nèi)置采樣轉(zhuǎn)換和重采樣功能

12、能夠合并多塊聲卡成一個聲卡

13、能夠同步播放多個音頻流

14、動態(tài)檢測藍(lán)牙音頻設(shè)備

15、使全系統(tǒng)均衡的能力

在前文有提到,pulseaudio聲音服務(wù)器介于應(yīng)用程序和聲卡驅(qū)動之間,意思是pulseaudio并不是最底層的實(shí)現(xiàn),他是在調(diào)用alsa-lib的基礎(chǔ)上添加了更豐富的功能,但是其底層實(shí)現(xiàn)還是離不開 alsa-lib。

3、ALSA層

從前文可知,真正驅(qū)動底層硬件的是ALSA,ALSA是目前Linux主流的音頻體系架構(gòu),全稱(Advanced Linux Sound Architecture, 高級linux音頻架構(gòu))。如果說PulseAudio是用戶級的混音器(mixer),它直接管理你的聲卡,那么ALSA就是內(nèi)核級混音器。在運(yùn)行時,PulseAudio使用ALSA提供的驅(qū)動,管理各種混合、設(shè)備、網(wǎng)絡(luò)音頻支持等涉及音頻的服務(wù)。

說到ALSA,我們就不得不先提到OSS(Open Sound System),這是unix平臺上一個統(tǒng)一的音頻接口。此前,每個Unix廠商都會提供一個自己專有的API,用來處理音頻。這就意味著為一種Unix平臺編寫的音頻處理應(yīng)用程序,在移植到另外一種Unix平臺上時,必須要重寫。

不僅如此,在一種平臺上具備的功能,可能在另外一個平臺上無法實(shí)現(xiàn)。但是,OSS出現(xiàn)以后情況就大不一樣了,只要音頻處理應(yīng)用程序按照OSS的API來編寫,那么在移植到另外一個平臺時,只需要重新編譯即可。因此,OSS提供了源代碼級的可移植性。

ALSA可以看成是OSS的繼任者,但是ALSA卻沒有完全擺脫OSS的影子,ALSA的兼容層是包含OSS的,ALSA支持舊版本的OSS API 接口,能為大多數(shù)的OSS應(yīng)用程序提供兼容,ALSA也因?yàn)槠渫该餍?、高效性、靈活性,以及了兼容性,使之成為了Linux音頻系統(tǒng)的標(biāo)準(zhǔn),也成為了幾乎其他所有的音頻架構(gòu)和硬件通信的橋梁。

03框架實(shí)現(xiàn)方案

結(jié)合以上,openKylin桌面系統(tǒng)關(guān)于聲音的框架方案就清晰了:

  • 用戶層,使用ukui-media給用戶提供方便的可視化圖形控制界面

  • 功能層:使用pulseaudio來實(shí)現(xiàn)豐富的功能

  • 驅(qū)動層:調(diào)用alsa-lib 來高效實(shí)現(xiàn)底層驅(qū)動

如下圖所示:


舉個例子,針對于一個完整的調(diào)節(jié)音量過程大致是這樣,用戶使用面板上的音量調(diào)節(jié)工具調(diào)節(jié)音量時,實(shí)際上調(diào)節(jié)的是個虛擬設(shè)備,用戶調(diào)節(jié)PulseAudio的虛擬設(shè)備,PulseAudio調(diào)節(jié)ALSA,ALSA調(diào)節(jié)完底層硬件后,反饋給PulseAudio,PulseAudio再反饋給虛擬設(shè)備,按原路返回。大致流程如下圖所示:



04具體功能實(shí)現(xiàn)舉例

1、可用端口搜尋

可用端口的實(shí)現(xiàn),首先需要將所有聲卡中能進(jìn)行輸出的端口列出來,然后對所有的端口進(jìn)行識別判斷其可用性。實(shí)現(xiàn)可用端口的好處:能夠?qū)⒙暱ㄖ凶R別到所有的可用端口都顯示出來,有的聲卡有多個可用的輸出端口,只是在不同的profile中,這樣用戶能更簡潔到看到聲卡支持的輸入輸出設(shè)備,如下圖所示:


2、默認(rèn)輸入輸出設(shè)備邏輯

每當(dāng)系統(tǒng)的輸入輸出端口改變時,則有可能會更改默認(rèn)的輸入/輸出設(shè)備,如右圖所示設(shè)置默認(rèn)的輸出設(shè)備如下圖所示:


因此,我們設(shè)置了一個不同設(shè)備的優(yōu)先級,即如果有多個可選擇設(shè)備存在的情況,我們會優(yōu)先選擇優(yōu)先級高的設(shè)備作為默認(rèn)設(shè)備,大致實(shí)現(xiàn)流程如下:



今天的講解到這就結(jié)束啦~通過前面的講解,大致介紹了openKylin系統(tǒng)關(guān)于聲音這一部分的主要框架邏輯,其使用了ukui-media給用戶提供了圖形化界面,結(jié)合pulseaudio對于各功能的實(shí)現(xiàn),附加上alsa對底層硬件的高效率處理,其體驗(yàn)效果能使音頻完美呈現(xiàn)且穩(wěn)定運(yùn)行,后期我們也會進(jìn)一步完善其功能,歡迎感興趣的小伙伴來與我們進(jìn)行更深入的探討~


openKylin系統(tǒng)音頻大體框架介紹的評論 (共 條)

分享到微博請遵守國家法律
堆龙德庆县| 武强县| 安吉县| 和平区| 九寨沟县| 斗六市| 江油市| 大洼县| 上蔡县| 遵化市| 宜城市| 象州县| 故城县| 扎兰屯市| 常熟市| 博客| 喀什市| 吉木乃县| 剑河县| 金坛市| 裕民县| 博乐市| 湘西| 武强县| 通渭县| 延长县| 定远县| 永嘉县| 清丰县| 巴里| 平塘县| 辽宁省| 溧阳市| 新丰县| 固阳县| 昌宁县| 涿州市| 兴化市| 繁峙县| 桂阳县| 城固县|