我已經開發了一個非常複雜的音頻軟件爲我的客戶與Winamp的插件,Windows媒體播放器和VST。現在客戶對某種方法感興趣,以避免維護大量的插件,我們無法支持所有的媒體播放器。基本上,我們需要的是一種總是可靠地攔截儘可能多的音頻流協議的方式(很好,除了ASIO之外,我想這是另外一個故事),然後通過我們的自定義效果引擎傳遞這個音頻,然後返回到默認的音頻設備,無論它是什麼。音頻掛鉤或自定義音頻驅動程序音頻處理和路由到默認音頻設備
現在我在想,我有什麼選擇(理論上)。
我可以使用掛鉤。我需要掛鉤全球較早的vaweOut和DirectSound。
但是,這仍然可以在Vista/7上運行嗎?
我可以用一個虛擬驅動器,如虛擬音頻電纜的作者所做的: http://software.muzychenko.net/eng/vac.htm
似乎是一個相當艱鉅的任務。無論如何,客戶會聯繫VAC的作者,看看他是否同意以合理的價格出售他的源代碼。
此驅動程序可以將其自身安裝爲默認音頻輸出設備,從Windows截取音頻流並將其傳遞迴默認設備。嗯,但是對於各種DirectSound音頻緩衝區,我必須自己將它們混合,還是有什麼方法可以告訴Windows調音臺爲我混音並傳遞單個混合音頻流? 看來,這個自定義驅動程序當然會殺死所有的硬件音頻加速,但如果我們警告我們的客戶這個問題,我們可以忍受。
據我所知,最新的Windows驅動程序標準是WDF。
但也許它不適用於Windows Vista/7上的音頻? 我知道,Vista/7與XP有不同的音頻棧。
如果我可以使用WDF來做,我應該寫什麼驅動程序 - 內核模式還是用戶模式?
也許我缺少更優雅和簡單的選項來攔截,處理和路由Windows上的音頻?