2014-05-21 93 views
0

我需要做的是讓音頻流在我的揚聲器上播放,而不需要任何額外的硬件。捕獲聲音輸出

如果有揚聲器輸出(比如人聲),那麼我需要顯示一些圖像。那麼我如何確定揚聲器是否有聲音?

我想在Windows 7上爲此使用C#。

謝謝。

+0

可能重複http://stackoverflow.com/questions/1292076/capture與AudioMeterInformationAudioEndpointVolume訪問此 - 聲音輸出在C - 銳) –

回答

0

您可以使用CSCore,它可以讓您獲得任何應用程序和整個設備的高峯。您可以通過檢查峯值來確定聲音是否正在播放。關於如何獲得應用程序的高峯,這是一個example。而這兩個例子如何獲得一個特定設備的峯值:

[TestMethod] 
    [TestCategory("CoreAudioAPI.Endpoint")] 
    public void CanGetAudioMeterInformationPeakValue() 
    { 
     using (var device = Utils.GetDefaultRenderDevice()) 
     using (var meter = AudioMeterInformation.FromDevice(device)) 
     { 
      Console.WriteLine(meter.PeakValue); 
     } 
    } 

    [TestMethod] 
    [TestCategory("CoreAudioAPI.Endpoint")] 
    public void CanGetAudioMeterInformationChannelsPeaks() 
    { 
     using (var device = Utils.GetDefaultRenderDevice()) 
     using (var meter = AudioMeterInformation.FromDevice(device)) 
     { 
      for (int i = 0; i < meter.MeteringChannelCount; i++) 
      { 
       Console.WriteLine(meter[i]); 
      } 
     } 
    } 

只是檢查是否有大於零或者類似0.05(您可能需要與實驗)更大的峯值。如果峯值大於某個值,則有應用程序正在播放某些內容。

也看看這個:http://cscore.codeplex.com/SourceControl/latest#CSCore.Test/CoreAudioAPI/EndpointTests.cs。要獲得Utils.GetDefaultRendererDevice的實現,請參閱此處:http://cscore.codeplex.com/SourceControl/latest#CSCore.Test/CoreAudioAPI/Utils.cs

第一個示例獲取所有通道峯值的平均峯值,第二個示例獲取輸出設備每個通道的峯值。

1

您可以使用WASAPI Loopback Capture進行此操作。我的開源NAudio庫包含一個名爲WasapiLoopbackCapture的包裝。 WASAPI Loopback Capture的一個怪癖是,當系統播放靜音時,不會有任何回調,儘管這對你來說可能沒有關係

如果你實際上不需要檢查樣本的值,WASAPI也允許你監視設備的音量。在n音訊您可以在MMDevice(你可以用MMDeviceEnumerator.GetDefaultAudioEndpoint得到這個渲染)

[捕獲聲音輸出在C#(的
+0

我怎樣才能趕上WasapiLoopbackCapture回調? – Freshchris