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录音输出流的主要内容,如果未能解决你的问题,请参考以下文章