【问题标题】:Capture Audio on PC as a stream in real-time将 PC 上的音频实时捕获为流
【发布时间】:2020-01-28 18:37:53
【问题描述】:

在 NAudio 中,您可以使用此代码捕获音频

capture.Start();
Console.ReadKey();
capture.Stop();

但我不想等待capture.Stop(); 我想立即访问捕获并将其流式传输到另一个音频设备,例如在 CsCore 中,您可以使用此代码流式传输语音合成

using (var stream1 = new MemoryStream())
     using (var speechEngine1 = new SpeechSynthesizer())
     {
       speechEngine1.SetOutputToWaveStream(stream1);
       speechEngine1.Speak(text_to_read);
       using (var waveOut1 = new CSCore.SoundOut.WaveOut { 
            Device = new WaveOutDevice(audio_device_id) })
            using (var waveSource1 = new MediaFoundationDecoder(stream1))
                 {
                  waveOut1.Initialize(waveSource1);
                  waveOut1.Play();
                  waveOut1.WaitForStopped();
                  }
      }

我可以做类似这段代码的事情,但不是语音合成,我想将我的默认音频设备流式传输到另一个音频设备。

【问题讨论】:

    标签: c# naudio


    【解决方案1】:

    您可以通过订阅事件来获取字节块。 https://github.com/naudio/NAudio/blob/master/Docs/WasapiLoopbackCapture.md

    capture.DataAvailable += (s, a) =>
    {
        writer.Write(a.Buffer, 0, a.BytesRecorded);
        if (writer.Position > capture.WaveFormat.AverageBytesPerSecond * 20)
        {
            capture.StopRecording();
        }
    };
    

    【讨论】:

    • 但是我必须等到捕获时间完成并且我不希望这样,没有其他更好的方法吗?
    • @kurdishdevil 事件在数据可用时立即调用,这并不意味着您必须等到捕获时间完成
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2014-10-25
    • 2013-04-08
    • 1970-01-01
    • 2011-09-28
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多