我需要做的是讓音頻流在我的揚聲器上播放,而不需要任何額外的硬件。捕獲聲音輸出
如果有揚聲器輸出(比如人聲),那麼我需要顯示一些圖像。那麼我如何確定揚聲器是否有聲音?
我想在Windows 7上爲此使用C#。
謝謝。
我需要做的是讓音頻流在我的揚聲器上播放,而不需要任何額外的硬件。捕獲聲音輸出
如果有揚聲器輸出(比如人聲),那麼我需要顯示一些圖像。那麼我如何確定揚聲器是否有聲音?
我想在Windows 7上爲此使用C#。
謝謝。
您可以使用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
第一個示例獲取所有通道峯值的平均峯值,第二個示例獲取輸出設備每個通道的峯值。
您可以使用WASAPI Loopback Capture進行此操作。我的開源NAudio庫包含一個名爲WasapiLoopbackCapture
的包裝。 WASAPI Loopback Capture的一個怪癖是,當系統播放靜音時,不會有任何回調,儘管這對你來說可能沒有關係
如果你實際上不需要檢查樣本的值,WASAPI也允許你監視設備的音量。在n音訊您可以在MMDevice
(你可以用MMDeviceEnumerator.GetDefaultAudioEndpoint
得到這個渲染)
我怎樣才能趕上WasapiLoopbackCapture回調? – Freshchris
可能重複http://stackoverflow.com/questions/1292076/capture與
AudioMeterInformation
或AudioEndpointVolume
訪問此 - 聲音輸出在C - 銳) –