2009-11-13 70 views
0

歷史&現狀:Java聲音API來訪問系統/主音量控制在Vista和Win 7

我目前正在更新這是爲客戶在幾年前開發的Java應用程序(以在WinXP上運行),用於測試和培訓有特定聽力障礙的人。購買此應用程序的用戶提供了特定的USB音頻設備和耳機。

該軟件最重要的要求之一是音頻必須以特定的分貝聲級播放給用戶。使用Java Sound API,該應用程序的開發是爲了將Windows音量動態調整爲計算出的音量(根據在開發期間校準USB音響設備&耳機時所進行的測量)。

問題:

現在,應用程序需要升級到支持Windows Vista和Windows 7,但是由於Windows的新的每個應用的聲音架構,我一直無法找到任何方式訪問使用Java Sound API的主/系統卷。

應用程序的Windows音量控制本身並不會削減它,因爲它與系統音量有關,並且無法保證用戶能夠以特定的已知級別聽到輸出音頻。

有沒有人知道如果它甚至有可能在Java中做到這一點,如果是的話,那麼如何?如果這是不可能的,那麼你能給出一些關於實現它的最簡單方法的指導嗎? (JNI和C也許 - 雖然我以前從未使用過JNI ......任何需要注意的細節?)

回答

2

如果在Windows XP兼容模式下運行應用程序,它應該可以工作(這取決於Java聲音API與硬件音量交互)。

如果您想使用Vista(及更高版本)的聲音API,您需要查看IAudioEndpointVolume API。

+0

感謝:D我不知道爲什麼我不想在Win XP兼容模式下嘗試它,但是如果啓用該選項,它會很好地工作。 – lethek 2009-11-16 01:25:34

0

我的猜測是,因爲您使用的是USB設備,您的Java聲音API無法訪問正確的頻道。

你可以看看how to adjust the master volume in Windows XP。我知道你不是在XP中工作,但看看如何訪問該鏈接上的特定行和混音器。您可能需要嘗試一下才能找到正確的線路和混音器組合,或爲您的用戶提供一個GUI,以便他們選擇正確的線路和混音器組合。

我已經運行在Windows 7中使用此方法的應用程序,所以我懷疑它是否是O兼容性問題。

+1

如果內存正確地爲我服務,它不是一個問題或錯誤的通道/線路/混音器:問題在於API沒有提供任何方式來調整Vista/7中「整個系統」的設備主音量 - 它只會改變特定應用程序的音量,然後受到系統設備真實主音量的影響(您無法控制或測量)。 – lethek 2011-04-27 04:25:11

+0

例如在Windows混合器中手動將系統音量設置爲50%,然後將應用程序中的「主」設置爲100%並嘗試一下。然後再試一次,手動將系統音量設置爲其他值。你會看到它們是完全獨立的,但是依賴於音量控制,並且無法從應用程序訪問系統的主控 – lethek 2011-04-27 04:31:54