NAudio 录制缓冲区在录制 5 秒后已满

本文关键字:缓冲区 NAudio | 更新日期: 2023-09-27 17:56:03

我正在使用Visual C# Studio制作一个从麦克风录制的程序。

我想录制几分钟,但是当我尝试录制时,它在录制 5 秒后显示"缓冲区已满"错误。

这是我正在使用的代码:

private void button2_Click(object sender, EventArgs e) //Play Button
{
  fileName = "lastReplay.wav";            
  FileStream FS_Write = File.OpenWrite("lastReplay.wav");
  FS_Write.Close();
  int deviceNumber = sourceList.SelectedItems[0].Index;
  sourceStream = new NAudio.Wave.WaveIn();
  sourceStream.DeviceNumber = deviceNumber;
  sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100,  
      NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
  NAudio.Wave.WaveInProvider waveIn = new
      NAudio.Wave.WaveInProvider(sourceStream);
  sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>
      (sourceStream_DataAvailable);
  waveWriter = new NAudio.Wave.WaveFileWriter(fileName, sourceStream.WaveFormat);
  sourceStream.StartRecording();
}

private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
  if (waveWriter == null) return;
  waveWriter.Write(e.Buffer, 0, e.BytesRecorded);
  waveWriter.Flush();
}

有谁知道问题出在哪里?谢谢。

NAudio 录制缓冲区在录制 5 秒后已满

里面有一堆你不需要的代码。摆脱创建空的 WAV 文件。此外,不需要WaveInProvider.事实上,这就是导致缓冲区完全异常的原因,因为没有任何东西从中读取。