C# 捕捉声音输出

C# 捕捉声音输出,c#,windows,audio,C#,Windows,Audio,我需要做的是让音频流在我的扬声器上播放,而不需要任何额外的硬件 如果有扬声器输出(比如人声),那么我需要显示一些图像。那么,我如何确定扬声器是否发出声音 我想在Windows7上使用C#来实现这一点 谢谢。您可以使用它来获取任何应用程序和整个设备的峰值。您可以通过检查峰值来确定是否播放声音。这是一篇关于如何获得应用程序峰值的文章。下面是两个如何获得一个特定设备峰值的示例: [TestMethod] [TestCategory("CoreAudioAPI.Endpoint")]

我需要做的是让音频流在我的扬声器上播放,而不需要任何额外的硬件

如果有扬声器输出(比如人声),那么我需要显示一些图像。那么,我如何确定扬声器是否发出声音

我想在Windows7上使用C#来实现这一点

谢谢。

您可以使用它来获取任何应用程序和整个设备的峰值。您可以通过检查峰值来确定是否播放声音。这是一篇关于如何获得应用程序峰值的文章。下面是两个如何获得一个特定设备峰值的示例:

    [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]);
            }
        }
    }
[TestMethod]
[TestCategory(“CoreAudioAPI.Endpoint”)]
public void CanGetAudioMeterInformationPeakValue()
{
使用(var device=Utils.GetDefaultRenderDevice())
使用(var计=听力计信息。来自设备(设备))
{
控制台写入线(仪表峰值);
}
}
[测试方法]
[TestCategory(“CoreAudioAPI.Endpoint”)]
public void CanGetAudioMeterInformationChannelsPeaks()
{
使用(var device=Utils.GetDefaultRenderDevice())
使用(var计=听力计信息。来自设备(设备))
{
对于(int i=0;i
只需检查是否存在大于零的峰值或类似于0.05的值(您可能需要对此进行实验)。如果峰值大于某个值,则有任何应用程序正在播放某些内容

还可以看看这个:。要获取Utils.getDefaultRenderDevice的实现,请参阅以下内容:


第一个示例获取所有信道峰值的平均峰值,第二个示例获取输出设备的每个信道的峰值

您可以通过WASAPI环回捕获来实现这一点。我的开源库包含一个名为
WasapiLoopbackCapture
的包装器。WASAPI环回捕获的一个怪癖是,当系统处于静默状态时,您不会得到任何回调,尽管这对您可能并不重要


如果您实际上不需要检查样本的值,WASAPI还允许您监视设备的卷级别。在NAudio中,您可以通过
MMDevice
上的
AudioMeterInformation
AudioEndpointVolume
访问此文件(您可以通过
MMDeviceEnumerator.GetDefaultAudioEndpoint
获取此文件以进行渲染)

我如何捕获WasapiLoopbackCapture回调的可能重复?