NAudio录音输出流

Posted

技术标签:

【中文标题】NAudio录音输出流【英文标题】:NAudio recording output stream 【发布时间】:2021-03-17 13:00:26 【问题描述】:

首先我初始化它

WaveIn waveInStream = new WaveIn();
waveInStream.WaveFormat = new WaveFormat(44100, 2);
waveInStream.BufferMilliseconds = 36000000;  

waveInStream.DeviceNumber = 0;

waveInStream.DataAvailable += WaveInStream_DataAvailable;
waveInStream.RecordingStopped += WaveInStream_RecordingStopped;

WaveFileWriter wave_writer = new WaveFileWriter(full_file_path, waveInStream.WaveFormat);

在 waveInStream.StartRecording();我得到一个异常 - BadDeviceId 调用 waveInOpen。 我看到 WaveIn.DeviceCount = 0; 但我不需要像麦克风这样的实际输入设备,我想记录我生成的声音并传递给声卡输出。 我应该如何设置 waveInStream 来做到这一点?

【问题讨论】:

如果你自己产生声音,那么你需要一个输出设备,而不是输入设备 我在输出设备中生成声音,但在输入设备中录制。 WaveOut 没有 StartRecording/StopRecording 方法。 您已经拥有数据,因此不需要任何设备。如果您想将其保存到 wav 文件中,只需使用 WaveFileWriter 并提供您的数据 我明白了。但我使用其他(桑福德)库生成笔记。我可以用 NAudio 生成笔记吗? 如果您不是自己控制生成,而只是将输出设备提供给另一个库,您始终可以自己创建一个输出设备,它只获取数据并保存它并将其提供给实际输出设备。它不需要那么多方法。或者你可以使用WasapiLoopbackCapture 【参考方案1】:

我按照别人的建议做了

MMDevice mm_dev;

private void MainForm_Load(object sender, EventArgs e)

    if (OutputDevice.DeviceCount > 0)
    
        outDevice = new OutputDevice(0);

        MMDeviceEnumerator enumerator = new MMDeviceEnumerator();
        //here I see my sound card
        mm_dev = enumerator.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active)[0];

         loopback_capture = new WasapiLoopbackCapture(mm_dev);
         loopback_capture.DataAvailable += Loopback_capture_DataAvailable;
         loopback_capture.RecordingStopped += Loopback_capture_RecordingStopped;
         
         wave_writer = new WaveFileWriter(full_file_path, waveInStream.WaveFormat);
    


private void Loopback_capture_DataAvailable(object sender, WaveInEventArgs e)

     wave_writer.Write(e.Buffer, 0, e.BytesRecorded);

但是在 loopback_capture.StartRecording(); 我得到 -

值不在预期范围内。

我错过了什么?

【讨论】:

以上是关于NAudio录音输出流的主要内容,如果未能解决你的问题,请参考以下文章

如何将音频流从输出设备发送到输入设备?

带有 NAudio 的音频中继器

NAudio:使用 ASIO 录制音频并用吉他输出

来自麦克风迭代结果的缓冲流

NAudio 的问题

是否可以在 C# 中使用 NAudio 创建新的音频输入?