VISTA音量控制 [翻譯]
更新時(shí)間:2007年02月26日 00:00:00 作者:
原文:https://blogs.msdn.com/larryosterman/archive/2005/12/15/504158.aspx
作者:larryosterman
翻譯:Tony Qu (來自BluePrint翻譯團(tuán)隊(duì))
在Vista之前,所有對(duì)應(yīng)用程序的控制都是系統(tǒng)級(jí)的——當(dāng)你用wave volumn API改變音量的時(shí)候,你會(huì)同時(shí)改變硬件(聲卡)的音量,因此會(huì)影響系統(tǒng)中所有的應(yīng)用程序。這樣做的問題在于,對(duì)于絕大部分應(yīng)用程序來說,這是完全錯(cuò)誤的行為。該行為是老的Windows 3.1音頻架構(gòu)的傳統(tǒng)行為,在Windows 3.1的音頻架構(gòu)中,同一時(shí)間只允許一個(gè)應(yīng)用程序播放聲音,而在這種情況下,由于只有一個(gè)硬件音量,所以是有意義的。
在Win98的WDM音頻驅(qū)動(dòng)在發(fā)布之后,微軟添加了內(nèi)核模式音頻混合器,但是他卻把音量控制架構(gòu)獨(dú)立了出來。Windows API可以做的音量控制仍然是硬件音量控制,這么做的理由很簡(jiǎn)單:雖然每個(gè)應(yīng)用程序確實(shí)需要單獨(dú)的音量控制,但在Win98架構(gòu)中,無法將一個(gè)獨(dú)立的音頻流和一個(gè)特定應(yīng)用程序關(guān)聯(lián)在一起,作為替換,音頻流是單獨(dú)處理的。
事實(shí)上,大部分應(yīng)用程序確實(shí)需要單獨(dú)控制他們音頻流的音量,它們不想(也不需要)與其他應(yīng)用程序混作一團(tuán),這其實(shí)是音頻架構(gòu)所導(dǎo)致的一個(gè)十分不好的副作用。
對(duì)于一些應(yīng)用程序來說,我們是有解決方案的。例如,如果你使用的是DirectSound(或者DirectShow,實(shí)際上,DirectShow是基于DirectSound實(shí)現(xiàn)的),你可以把你的音頻流放入一個(gè)輔助緩沖,因?yàn)镈Sound輔助緩沖是有自己的音量控制的,這樣就可以有效地為每一個(gè)應(yīng)用程序提供單獨(dú)的音量控制。但這對(duì)于那些不使用DirectSound的應(yīng)用程序沒有任何幫助,它們只能依賴于調(diào)整硬件音量。
對(duì)于Vista而言,有一樣?xùn)|西被作為新的音頻架構(gòu)的一部分部署,那就是組件,叫做“音頻策略”。策略引擎的一項(xiàng)任務(wù)就是跟蹤哪個(gè)音頻流屬于哪個(gè)應(yīng)用程序。
在vista中,每個(gè)音頻流都與一個(gè)"音頻會(huì)話"(audio session)關(guān)聯(lián),音頻會(huì)話則是與一個(gè)進(jìn)程關(guān)聯(lián)的(每一個(gè)進(jìn)程可以有多個(gè)音頻會(huì)話,音頻會(huì)話則可以跨越多個(gè)進(jìn)程,但是默認(rèn)情況下,每個(gè)音頻會(huì)話是當(dāng)前進(jìn)程中的音頻流集合)
每個(gè)音頻會(huì)話有它自己的音量控制,WASAPI會(huì)提供允許應(yīng)用程序控制音頻會(huì)話的音量的接口。音量控制API還包含了一個(gè)通知機(jī)制,這樣的話,那些需要在音量控制改變時(shí)被通知到的應(yīng)用程序可以實(shí)現(xiàn)這一點(diǎn)——這一機(jī)制允許應(yīng)用程序了解其他人在何時(shí)更改音量。
這一切都很完美,但是這樣的話,我們?cè)撎幚砟切┮延械氖褂糜布袅靠刂?,但是卻又不想使用硬件音量控制的程序?
記住我所說的,所有的已有API都被移植,從而直接使用WASAPI。我們也把那些音量控制的API移植為使用WASAPI的音量控制接口。
我們也改變了mixerLine API來使用WASAPI。這稍微有點(diǎn)復(fù)雜,因?yàn)閙ixerLine API也需要我們定義一個(gè)音頻設(shè)備的布局(topology),但是我們已經(jīng)定義了相對(duì)簡(jiǎn)單的布局,這一布局應(yīng)該與現(xiàn)存的硬件技術(shù)相匹配(所有appcompat不應(yīng)該是一個(gè)問題)
這么做的結(jié)果是:默認(rèn)情況下,在Vista Beta 2中,我們將第一次為所有的應(yīng)用程序提供每應(yīng)用程序(per-application)的音量控制
作者:larryosterman
翻譯:Tony Qu (來自BluePrint翻譯團(tuán)隊(duì))
在Vista之前,所有對(duì)應(yīng)用程序的控制都是系統(tǒng)級(jí)的——當(dāng)你用wave volumn API改變音量的時(shí)候,你會(huì)同時(shí)改變硬件(聲卡)的音量,因此會(huì)影響系統(tǒng)中所有的應(yīng)用程序。這樣做的問題在于,對(duì)于絕大部分應(yīng)用程序來說,這是完全錯(cuò)誤的行為。該行為是老的Windows 3.1音頻架構(gòu)的傳統(tǒng)行為,在Windows 3.1的音頻架構(gòu)中,同一時(shí)間只允許一個(gè)應(yīng)用程序播放聲音,而在這種情況下,由于只有一個(gè)硬件音量,所以是有意義的。
在Win98的WDM音頻驅(qū)動(dòng)在發(fā)布之后,微軟添加了內(nèi)核模式音頻混合器,但是他卻把音量控制架構(gòu)獨(dú)立了出來。Windows API可以做的音量控制仍然是硬件音量控制,這么做的理由很簡(jiǎn)單:雖然每個(gè)應(yīng)用程序確實(shí)需要單獨(dú)的音量控制,但在Win98架構(gòu)中,無法將一個(gè)獨(dú)立的音頻流和一個(gè)特定應(yīng)用程序關(guān)聯(lián)在一起,作為替換,音頻流是單獨(dú)處理的。
事實(shí)上,大部分應(yīng)用程序確實(shí)需要單獨(dú)控制他們音頻流的音量,它們不想(也不需要)與其他應(yīng)用程序混作一團(tuán),這其實(shí)是音頻架構(gòu)所導(dǎo)致的一個(gè)十分不好的副作用。
對(duì)于一些應(yīng)用程序來說,我們是有解決方案的。例如,如果你使用的是DirectSound(或者DirectShow,實(shí)際上,DirectShow是基于DirectSound實(shí)現(xiàn)的),你可以把你的音頻流放入一個(gè)輔助緩沖,因?yàn)镈Sound輔助緩沖是有自己的音量控制的,這樣就可以有效地為每一個(gè)應(yīng)用程序提供單獨(dú)的音量控制。但這對(duì)于那些不使用DirectSound的應(yīng)用程序沒有任何幫助,它們只能依賴于調(diào)整硬件音量。
對(duì)于Vista而言,有一樣?xùn)|西被作為新的音頻架構(gòu)的一部分部署,那就是組件,叫做“音頻策略”。策略引擎的一項(xiàng)任務(wù)就是跟蹤哪個(gè)音頻流屬于哪個(gè)應(yīng)用程序。
在vista中,每個(gè)音頻流都與一個(gè)"音頻會(huì)話"(audio session)關(guān)聯(lián),音頻會(huì)話則是與一個(gè)進(jìn)程關(guān)聯(lián)的(每一個(gè)進(jìn)程可以有多個(gè)音頻會(huì)話,音頻會(huì)話則可以跨越多個(gè)進(jìn)程,但是默認(rèn)情況下,每個(gè)音頻會(huì)話是當(dāng)前進(jìn)程中的音頻流集合)
每個(gè)音頻會(huì)話有它自己的音量控制,WASAPI會(huì)提供允許應(yīng)用程序控制音頻會(huì)話的音量的接口。音量控制API還包含了一個(gè)通知機(jī)制,這樣的話,那些需要在音量控制改變時(shí)被通知到的應(yīng)用程序可以實(shí)現(xiàn)這一點(diǎn)——這一機(jī)制允許應(yīng)用程序了解其他人在何時(shí)更改音量。
這一切都很完美,但是這樣的話,我們?cè)撎幚砟切┮延械氖褂糜布袅靠刂?,但是卻又不想使用硬件音量控制的程序?
記住我所說的,所有的已有API都被移植,從而直接使用WASAPI。我們也把那些音量控制的API移植為使用WASAPI的音量控制接口。
我們也改變了mixerLine API來使用WASAPI。這稍微有點(diǎn)復(fù)雜,因?yàn)閙ixerLine API也需要我們定義一個(gè)音頻設(shè)備的布局(topology),但是我們已經(jīng)定義了相對(duì)簡(jiǎn)單的布局,這一布局應(yīng)該與現(xiàn)存的硬件技術(shù)相匹配(所有appcompat不應(yīng)該是一個(gè)問題)
這么做的結(jié)果是:默認(rèn)情況下,在Vista Beta 2中,我們將第一次為所有的應(yīng)用程序提供每應(yīng)用程序(per-application)的音量控制
相關(guān)文章
vista6000簡(jiǎn)體中文版http的下載 速度暴快
vista6000簡(jiǎn)體中文版http的下載 速度暴快...2006-12-12Windows Vista中IIS7的安裝及配置ASP+Access環(huán)境的圖文教程
Windows Vista中IIS7的安裝及配置ASP+Access環(huán)境的圖文教程...2007-02-02在vista下使用加載項(xiàng)擴(kuò)展IE7的功能
在vista下使用加載項(xiàng)擴(kuò)展IE7的功能...2007-03-03Windows Vista 寬屏LCD提供的支持 與設(shè)置方法
Windows Vista 寬屏LCD提供的支持 與設(shè)置方法...2007-03-03在Windows Vista中找回舊版的驅(qū)動(dòng)程序的方法
在Windows Vista中找回舊版的驅(qū)動(dòng)程序的方法...2007-03-03