2010-12-06 33 views
6

我試圖解決一個錯誤的Audacity圍繞portmixer旋轉。輸出/輸入級別可以使用portmixer的mac版本進行設置,但並不總是在Windows中。我正在調試portmixer的窗口代碼,試圖使它在那裏工作。爲什麼我不能設置主音量的USB /火線音頻接口與IAudioEndpointVolume :: SetMasterVolumeLevelScalar

使用IAudioEndpointVolume :: SetMasterVolumeLevelScalar設置主音量對板載聲音可以正常工作,但使用專業外置USB或火線接口(如RME Fireface 400),輸出音量不會改變,儘管它反映在Window的聲音控制該設備的面板以及系統混音器。

此外,在我們的程序之外,更改系統混音器的主滑塊(在任務欄中)沒有任何效果 - 聲卡輸出相同(完整)級別,無論系統所在的級別如何。改變輸出級別的唯一方法是使用硬件開發人員使用該卡製作的自定義應用程序。

IAudioEndpointVolume :: QueryHardwareSupport函數返回ENDPOINT_HARDWARE_SUPPORT_VOLUME,所以它應該能夠做到這一點。

這種行爲存在輸入和輸出在許多設備上。

這可能是一個窗口的錯誤嗎?

可以通過模擬(縮放)輸出來解決此問題,但這不是首選,因爲它在功能上並不相同 - 最好讓音頻接口進行縮放(尤其是對於包含前置放大器的輸入) 。

+0

也許該設備沒有真正實現標準的Windows方法。你可以嘗試調試供應商的應用程序,看看它在做什麼。它可能會發送一些自定義命令或其他東西。 – Luke 2010-12-08 16:47:55

回答

0

你談論般的RME-那些根本不支持設置主或通過軟件的任何其他級別的卡,並沒有什麼可以做這件事。這不是Windows錯誤。有人可能會爭辯說,儘管回饋ENDPOINT_HARDWARE_SUPPORT_VOLUME是一個錯誤,但可能來自驅動程序級別,而不是Windows本身。

我到目前爲止發現的唯一解決方案是將調試器(或添加dll鉤子)連接到供應商提供的軟件,並在設置時查看它所做的調用(它們是用於與硬件對話的那些調用器的調用器)DeviceIOControl供應商軟件中的卷。很難做到這一點每張卡,但可能值得做一些專業卡。尤其對於Audacity來說,對於開源音頻軟件來說,它其實並不是那麼糟糕,所以我可以想象一些人,如果他們卡上的音量可以由它設置,他們真的很開心。 (當時我們專門用RME多面我搞清楚DeviceIoControl的調用花費了相當長的一段時間,但最終它肯定是值得的,因爲我可以設置在分貝的音量在矩陣中的任何點)

相關問題