【问题标题】:C# CSCore stop recording when user stops talking当用户停止说话时,C# CSCore 停止录制
【发布时间】:2017-12-27 12:32:33
【问题描述】:

我目前正在尝试通过 WasapiCapture 和 WaveWriter(CSCore 包)录制音频,并希望在用户停止讲话后停止录制。谁能帮我吗?

我想到的是,我可能会创建一个 RecordingVolumeHandler,它会在音量低于某个阈值 1 或 2 秒时触发。我怎样才能做到这一点?有没有办法从当前正在录制的音频输入中获取音量?

以下代码用于我用于开始录制和停止录制的两个函数。

    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();
        }
    }

提前谢谢你!

【问题讨论】:

    标签: c# audio volume recording cscore


    【解决方案1】:

    您可以添加一个Timer 计数静默期。当它到期时 - 停止录制。我没有测试过这段代码。计时器可能不会重置,但思路应该很清楚。

    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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多