2017-07-21 5 views
2

Ich versuche gerade, Audio über WasapiCapture und WaveWriter (CSCore-Paket) aufzunehmen und möchte die Aufzeichnung stoppen, nachdem der Benutzer nicht mehr spricht. Kann mir jemand helfen?C# CSCore Stoppen der Aufnahme, wenn der Benutzer aufhört zu sprechen

Was mir in den Sinn kam, ist, dass ich möglicherweise einen RecordingVolumeHandler erstellen könnte, der ausgelöst wird, wenn die Lautstärke 1 oder 2 Sekunden lang unter einem bestimmten Schwellenwert liegt. Wie kann ich das machen? Gibt es eine Methode, um die Lautstärke von dem Audioeingang zu erhalten, der gerade aufgenommen wird?

Der folgende Code ist für die zwei Funktionen, die ich habe, um die Aufnahme zu starten und zu stoppen.

private WasapiCapture capture; 
    private WaveWriter writer; 

     private void startRecording() 
    { 
     capture = new WasapiCapture(); 
     capture.Initialize(); 
     writer = new WaveWriter("file.wav", capture.WaveFormat); 
     capture.DataAvailable += (s, capData) => 
     { 
      writer.Write(capData.Data, capData.Offset, capData.ByteCount); 
     }; 
     capture.Start(); 
    } 

    private void stopRecording() 
    { 
     if (writer != null && capture != null) 
     { 
      capture.Stop(); 
      writer.Dispose(); 
      capture.Dispose(); 
     } 
    } 

Vielen Dank im Voraus!

Antwort

0

Sie können eine Timer Zähldauer hinzufügen. Wenn es abläuft - Stoppen Sie die Aufnahme. Ich habe diesen Code nicht getestet. Der Timer wird möglicherweise nicht zurückgesetzt, aber die Idee sollte klar sein.

private WasapiCapture capture; 
private WaveWriter writer; 
private Timer silenceTimer; 

public Constructor() 
{ 
    silenceTimer = new Timer(); 
    silenceTimer.Interval = 5000; // 5 seconds 
    silenceTimer.Elapsed +=SilenceTimerElapsed; 
} 

private void SilenceTimerElapsed(object sender, ElapsedEventArgs e) 
{ 
    silenceTimer.Stop(); 
    stopRecording(); 
} 

private void startRecording() 
{ 
    capture = new WasapiCapture(); 
    capture.Initialize(); 
    writer = new WaveWriter("file.wav", capture.WaveFormat); 
    capture.DataAvailable += (s, capData) => 
    { 
     writer.Write(capData.Data, capData.Offset, capData.ByteCount); 
     silenceTimer.Stop(); 
     silenceTimer.Start(); // Resetting timer 
    }; 

    silenceTimer.Start(); 
    capture.Start(); 
} 

private void stopRecording() 
{ 
    if (writer != null && capture != null) 
    { 
     capture.Stop(); 
     writer.Dispose(); 
     capture.Dispose(); 
    } 
} 
Verwandte Themen