HTC DriverGate – 音頻版

閱讀時間圖標 4分鐘讀


讀者幫助支持 MSpoweruser。如果您透過我們的連結購買,我們可能會獲得佣金。 工具提示圖標

請閱讀我們的揭露頁面,了解如何幫助 MSPoweruser 維持編輯團隊的發展 阅读更多

司機門

好吧,在 Windows Mobile 感覺良好的一兩天后,我們又回到了一些不必要地困擾我們設備的問題。

似乎驅動程序再次影響了選定的 HTC 設備,包括所有當前的高端設備,如 HTC Touch Diamond、Touch Pro、HD 和 Xperia。 當聲音通過耳機或揚聲器定期播放(通常每 5 分鐘一次)時,您會聽到音頻中出現短暫的“跳躍”。 聲音被描述為滯後/跳過/打嗝/滴答聲/曇花一現。 問題似乎在波形設備驅動程序或硬件波形設備本身的深處(高通再次行動?) A2DP 中似乎不存在問題。

該問題主要影響第三方玩家,因為 HTC 似乎已經解決了該問題,但僅針對他們自己,通過構建自定義波驅動程序。

Conduits 袖珍播放器團隊一直在調查這個問題,但已經灰心喪氣。 這就是在這個問題上不得不說的。

我們對 HTC 音頻跳過問題進行了廣泛的測試,並得出結論,這不是 Conduits 可以解決的問題。 在分析了 HTC Audio Manager 程序和其他幾個文件(例如 HTC 的 DirectShow Audio Renderer HTCRenderFlt2.dll 和 HTCADXRenderer4.dll)後,我們發現它們都對 WaveOut 驅動程序進行了一些非常特殊的系統調用。

以下是我們發現的一些技術細節。 首先,我們認為線程或進程優先級與問題無關。 正常的音頻應用程序使用一個循環的“waveOut 緩衝區”來保持音頻輸出“滿”,以便系統從中提取和播放音頻數據。 應用程序使用標準 waveOutWrite 函數來填充這些緩衝區。 從 Pocket Player 的角度來看,這些緩衝區總是滿的,調整優先級不會影響這一點。 改善音頻跳過(影響 HTC TyTN)的一種方法是通過編輯 HKLM\Drivers\Builtin\WaveOut 下的註冊表值來提高 WaveOut 驅動程序的線程優先級。 這種方法在這裡不起作用。 有趣的是,這些跳過問題發生在台式 PC 上。 那裡的問題與實時驅動程序的處理時間“太長”有關,這會阻止音頻驅動程序處理下一批聲音。 這發生在帶有一些 MacBook 驅動程序的 Vista 中。

音頻管理器使用與標準 waveOut 調用不同的輸出機制——它使用 DirectShow 音頻渲染器過濾器,這是另一種發送音頻的方式。 查看其工作原理的內部結構,它使用的是完全不同的機制。 它使用專有的 waveOutMessage 調用來打開一個新的消息隊列,然後通過該隊列“流式傳輸”音頻。

Pocket Player(和其他應用程序)可能會通過使用 HTC Audio Renderer 而不是他們自己的 waveOut 例程來解決這個問題,但是我們會失去交叉淡入淡出和其他 Pocket Player 的特定功能。 我們做了一些創建 DirectShow 過濾器圖的初始測試(使用他們的音頻渲染器完成),但仍然遇到了跳過,所以必須有額外的步驟。

因此,Conduits 現在將此視為製造商有義務解決的特定於設備的問題。 或者,如果 HTC 想要為他們的音頻輸出驅動程序記錄他們特殊的“流媒體模式”,我們可以考慮適應這種模式。

如果您從 ROM 中提取 Wavedev.dll,您將看到無數關於“MP3 Streams”之類的調試消息,表明來自他們的軟件的音樂的完全獨立的音頻路徑。 如果需要,我們將重寫使用 DirectShow 輸出的 WaveOut 輸出插件(我們的輸出例程使用私有插件架構,就像我們的其他插件類型一樣)。

HTC 拒絕記錄他們是如何解決這個問題的,稱他們不支持第三方軟件。

當然,XDA-Developers 絕不會讓這種情況撒謊。 Thx1200 開始為能夠為這個問題提供開源解決方案並將其提供給社區的開發人員提供獎勵。 目前,賞金只有 30 美元,但我相信我們可以籌集更多捐款來解決任何使用 3rd 方音頻軟件的人的棘手問題。

在此處閱讀 XDA-Developers 的完整主題,並且如果您覺得這是需要糾正的情況,也不要忘記添加您的承諾。

有關主題的更多資訊: 音頻驅動程序, HTC