2014-03-28 217 views
0

我正在尋找一種方法來獲取音頻數據,並將其發送到默認錄音設備(如立體聲混音)或創建另一個虛擬音頻設備。我正在使用Java(eclipse)。我已經看過JMF,但我不明白我將如何發送音頻到設備。請讓我知道是否有更適合這個項目的圖書館,以及如何實施它。強制音頻輸入到麥克風

* *我想創建一個音頻源,以便使用像Skype這樣的麥克風的程序可以使用它。例如:我按下聲卡上的一個按鈕,並播放給其他呼叫者。

+1

麥克風是輸入設備。你能解釋一下強制音頻數據的意義嗎? – jaket

+0

創建*另一個Java(eclipse)*? – blueygh2

+0

恐怕我不明白這個問題。請解釋你實際想要做的事情。 – keshlam

回答

0

在標準Java中沒有辦法做到這一點,你將不得不分支到本地代碼,甚至更糟糕的是,操作特定的本地代碼。例如,利用JNA,您可以按照these Windows specific instructions來查找Windows系統上的音頻設備。

按照這些指示將是不容易though-首先你需要加載MMDeviceApi.dll庫,寫自己的JNA實施structuresMMDeviceApi.hdata types的。這將允許您訪問Windows上的MMDevice API。該API允許您使用IMMDeviceEnumerator枚舉系統上的所有音頻設備,包括僅特定列舉音頻輸入設備。

一旦你通過IMMEndpoint interface獲得相應的音頻終端,你可以遵循these instructions產生填入您的音頻數據的緩衝區和發送緩衝區的設備。但是,遵循第二組指令要求您加載Audioses.dll庫併爲此新庫編寫另一個JNA接口。

一旦你完成了所有這些步驟,基本上是複製在跨語言的方式the functionality described here,你將有最終實現你的functionality-但僅ONE操作系統!對於您將支持的每個操作系統,您需要使用該操作系統的特定功能重新執行此操作。

您的問題的最終答案是,沒有一個單一的庫,允許你從Java做到這一點。你可以做到這一點,它只是要求你解決這個事實,Java沒有很好的時間與系統級資源進行交互。實現這種功能的最簡單方法是幾乎完全跳過Java,並簡單地使用C或C++等低級語言編寫庫。如果你只想在Windows上實現這個功能,你甚至可以放棄使用.Net/C#。 C#與Java非常相似,切換語言並不困難。基本上,通過不同的語言來做你想要的是最好的方式!如果您想要堅持使用可能的Java,但請強烈考慮替代方案。