2015-04-29 58 views
0

我想弄清楚如何獲取單個音頻流,因爲他們出現在音頻混音器重新路由到一個聚合音頻設備。我專門爲了我製作的節目的目的而將它們保持爲低調的流(如果它們被混合到一個2聲道的混音中,就會破壞我試圖實現的目的)。抓取音頻會話,因爲它們出現在Windows音頻混音器(C#或C++)

EX:(正如我剛纔提出這個帳戶,我顯然我不能發表圖片,所以這裏是一個鏈接到圖像)

windows audio mixer

在此,我希望能搶「系統聲音」和「流客戶端引導程序」作爲謹慎的音頻流在別處路由,同時保持它們的原始目的地(同時實質上將音頻原始音頻設備複製到另一個音頻設備)。

我期待着用C#或C++來做到這一點。我已經細讀了微軟發佈的音頻API,雖然有些東西看起來接近我想要做的事情,但是沒有任何東西能夠引起人們的注意。我感謝任何幫助。謝謝。

+1

你看過NAudio(https://github.com/naudio/NAudio)是否可以完成你想要的功能嗎?它可以枚舉輸入流並選擇那些用於路由其他地方(如通過網絡)。請參閱他們提供的示例代碼。 –

回答

0

可以使用IAudioSessionManager2::GetSessionEnumerator和朋友(示例C++代碼是herethere)列舉會話。標準Windows音量混音器應用程序也使用此API。

然而API不能訪問數據流,你也不會有(你肯定沒有數據,不管它們是否被縮混)。您也不能將流重新路由到其他設備。應用程序不允許深入干涉。您可以做的最好的做法是創建自己的設備,交互式地將其選爲默認輸出設備,然後接受通過此設備播放音頻的應用程序中的數據。

+1

謝謝你們兩位回答。看起來如果不能訪問單個流,那麼我期望構建的內容也是不可能的。它完全依賴於能夠從計算機上運行的應用程序複製謹慎的音頻源,並將它們發送到虛擬輸出設備,在那裏它們可以混合(與窗口混音器類似)。 我的目的是爲現場直播的遊戲製作解決方案,其中使用與其他玩家的語音通信是至關重要的,但是阻止其他玩家的聲音被流式傳輸是期望的。 – Luke

+0

這也適用於從計算機輸出到同一輸出設備上的任何其他內容(如瀏覽器中的netflix或其他任何內容)。技術上來說,它可能是通過虛擬音頻電纜實現的半可能的,但它最多也是bug,不允許基於應用程序分離,而是基於您爲應用程序本身選擇的音頻輸出設備。並非所有的應用程序都能夠選擇除默認設備以外的任何其他應用程序 – Luke