2014-05-21 4 views
0

내가해야 할 일은 추가 하드웨어없이 스피커에서 오디오 스트림을 재생하는 것입니다.사운드 캡처 출력

스피커 출력 (사람의 목소리)이있는 경우 일부 이미지를 표시해야합니다. 그렇다면 스피커에서 나오는 소리가 있는지 어떻게 알 수 있습니까?

난 당신을 감사 창

7에 대한 C# .NET을 사용하려고합니다.

+0

가능한 중복 http://stackoverflow.com/questions/1292076/capture에 AudioMeterInformation 또는 AudioEndpointVolume와이 액세스 할 수 있습니다 -sound-output-in-c-sharp) –

답변

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를 사용하면 장치의 볼륨 레벨을 모니터합니다. NAudio에서 당신은 MMDevice (당신이 렌더링 MMDeviceEnumerator.GetDefaultAudioEndpoint와이를 얻을 수 있습니다)

[C#에서 캡처 사운드 출력 (의
+0

어떻게 WasapiLoopbackCapture 콜백을 잡을 수 있습니까? – Freshchris