有一个已开发的程序。 该程序使用NAudio录制和播放音频。 当您按CTRL + 1时,应该开始记录,而CTRL + 2停止记录,CTRL + 3播放文件,而CTRL + 4删除最后一个文件。 删除的结果是文件正在忙于该过程的错误。 据我了解,NAudio不会在录制后释放文件,因此,我无法删除该文件。
public partial class Form1 : Form
{
WaveIn waveIn;
WaveFileWriter writer;
string recordFile = "0.wav";
int numberRecords = 0;
public Form1()
{
InitializeComponent();
KeyPreview = true;
KeyDown += Form1_KeyDown;
}
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
}
else
{
writer.Write(e.Buffer, 0, e.BytesRecorded);
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.D1)
{
Thread.Sleep(500);
StartRecording();
}
else if (e.Control && e.KeyCode == Keys.D2)
{
if (waveIn != null)
{
StopRecording();
}
}
else if (e.Control && e.KeyCode == Keys.D3)
{
WaveStream mainOutputStream = new WaveFileReader(recordFile);
WaveChannel32 volumeStream = new WaveChannel32(mainOutputStream);
WaveOutEvent player = new WaveOutEvent();
player.Init(volumeStream);
player.Play();
}
else if (e.Control && e.KeyCode == Keys.D4)
{
if (File.Exists(recordFile))
{
File.Delete(recordFile);
numberRecords -= 1;
}
}
}
void StartRecording()
{
recordFile = Convert.ToString(numberRecords) + ".wav";
try
{
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += waveIn_RecordingStopped;
waveIn.WaveFormat = new WaveFormat(44100, 1);
writer = new WaveFileWriter(recordFile, waveIn.WaveFormat);
waveIn.StartRecording();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void StopRecording()
{
waveIn.StopRecording();
numberRecords += 1;
}
private void waveIn_RecordingStopped(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler(waveIn_RecordingStopped), sender, e);
}
else
{
waveIn.Dispose();
waveIn = null;
writer.Close();
writer = null;
}
}