2014-05-21 5 views
0

Ce que je dois faire est de lire le flux audio sur mes haut-parleurs, sans matériel supplémentaire.Capture de la sortie audio

S'il y a une sortie de haut-parleurs (disons une voix humaine) alors j'ai besoin d'afficher quelques images. Alors, comment puis-je déterminer s'il y a un son qui sort des haut-parleurs ??

Je veux utiliser C# pour cela sur Windows 7.

Je vous remercie.

+0

double possible de [Capture sortie audio C#] (http://stackoverflow.com/questions/1292076/capture -sound-output-in-c-sharp) –

Répondre

0

Vous pouvez utiliser CSCore qui vous permet d'obtenir le pic de toutes les applications et de l'ensemble du périphérique. Vous pouvez déterminer si le son est joué en vérifiant cette valeur de crête. C'est un example sur la façon d'obtenir le pic d'une application. Et ce sont deux exemples comment obtenir le maximum d'un dispositif particulier:

[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]); 
      } 
     } 
    } 

juste vérifier s'il y a un pic plus grand que zéro ou quelque chose comme 0,05 (vous devrez peut-être expérimenter avec cela). Si le pic est supérieur à une certaine valeur, il y a une application qui joue quelque chose.

Jetez également un coup d'oeil à ceci: http://cscore.codeplex.com/SourceControl/latest#CSCore.Test/CoreAudioAPI/EndpointTests.cs. Pour obtenir l'implémentation de Utils.GetDefaultRendererDevice, voir celui-ci: http://cscore.codeplex.com/SourceControl/latest#CSCore.Test/CoreAudioAPI/Utils.cs

Le premier exemple obtient le pic moyen de tous les pics de canal et le second exemple obtient les pics de chaque canal du périphérique de sortie. Vous pouvez le faire avec WASAPI Loopback Capture.

1

Ma bibliothèque open source NAudio inclut un wrapper pour cela appelé WasapiLoopbackCapture. Une des bizarreries de WASAPI Loopback Capture est que vous n'obtenez aucun rappel lorsque le système joue en silence, même si cela ne vous dérange pas

Si vous n'avez pas besoin d'examiner les valeurs des échantillons, WASAPI vous permet également pour surveiller le niveau de volume d'un périphérique. En NAudio vous pouvez accéder à ce avec AudioMeterInformation ou AudioEndpointVolume sur le MMDevice (vous pouvez obtenir cela avec MMDeviceEnumerator.GetDefaultAudioEndpoint pour le rendu)

+0

Comment puis-je intercepter le rappel WasapiLoopbackCapture? – Freshchris