【问题标题】:How to record and playback audio from default audio device如何从默认音频设备录制和播放音频
【发布时间】:2016-10-10 13:58:16
【问题描述】:

我似乎无法从默认音频设备录制音频,并在另一个音频设备上播放.. 我不想录麦克风,但音频设备..

当我播放电影时,我可以通过耳机听到声音,我想将声音复制到我选择的任何音频设备中。

如果您有任何建议,不一定非要与NAudio..

据我所知,NAudio 做不到。

这是我目前用于任务的代码,但它只接受来自我的麦克风的输入:Code sn-p with NAudio..

void playSoundCopy(int dv0)
{
    disposeWave0();// stop previous sounds before starting
    var waveOut0 = new WaveOut();
    waveOut0.DeviceNumber = dv0;
    wave0 = waveOut0;

    Defaultwave0 = new WaveIn();
    Defaultwave0.DeviceNumber = (int)GetDefaultDevice(Defaultdevice.FriendlyName);
    var waveinReader0 = new WaveInProvider(Defaultwave0);
    wave0.Init(waveinReader0);

    play0 = false;
    Thread.Sleep(1000);

    play0 = true;
    t0 = new Thread(() => { timeline0(); });
    t0.IsBackground = true;
    t0.Start();

    Defaultwave0.StartRecording();
    wave0.Play();
}

真正的问题实际上是我无法从 WaveOut 设备录制,只能从 WaveIn..

工作结果:

void playSoundCopy(int dv0)
{
    disposeWave0();// stop previous sounds before starting
    var waveOut0 = new WaveOut();
    waveOut0.DeviceNumber = dv0;
    wave0 = waveOut0;

    var format0 = Defaultdevice.AudioClient.MixFormat;
    buffer0 = new BufferedWaveProvider(format0);
    wave0.Init(buffer0);

    capture = new WasapiLoopbackCapture(Defaultdevice);
    capture.ShareMode = AudioClientShareMode.Shared;
    capture.DataAvailable += CaptureOnDataAvailable;

    play0 = false;
    Thread.Sleep(1000);

    play0 = true;
    t0 = new Thread(() => { timeline0(); });
    t0.IsBackground = true;
    t0.Start();

    capture.StartRecording();
    wave0.Play();
}
void CaptureOnDataAvailable(object sender, WaveInEventArgs waveInEventArgs)
{
     try
     {
         var itm = new byte[waveInEventArgs.BytesRecorded];
         Array.Copy(waveInEventArgs.Buffer, itm, waveInEventArgs.BytesRecorded);
         buffer0.AddSamples(itm, 0, itm.Length);
     }
     catch { }
}

【问题讨论】:

  • 有了这个小信息,我想没有人可以帮助你。请详细解释并在需要时添加一些代码/更多上下文。
  • 我在寻求建议,而不是实际代码,除非它是一个代码 sn-p..
  • 也许您首先需要启用为此所需的录音设备。例如从 audacity 看到这个页面:manual.audacityteam.org/man/…
  • 很抱歉,这个例子不起作用.. 零声音...

标签: c# wpf naudio


【解决方案1】:

您可以使用WasapiLoopbackCapture 捕获发送到设备的音频。然后您可以将其通过管道传输到BufferedWaveProvider 并使用它来提供另一个输出设备。不过会有一些延迟,所以不要指望这两个设备会同步。

【讨论】:

  • 听起来不错,但是 WasapiLoopbackCapture 是否适用于我的音频设备而不是我的麦克风?一个代码 sn-p 会很好..
  • yes WasapiLoopbackCapture 将记录声卡的输出。您可以在 NAudio WPF 演示项目中找到一些示例代码
  • 可以给我个链接吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多