private IWaveIn waveIn;
private WaveFileWriter writer;
/// <summary>
/// 開始錄音
/// </summary>
private void StartRecording()
{
if (waveIn != null) return;
waveIn = new WaveIn {WaveFormat = new WaveFormat(8000, 1)};//設置碼率
writer = new WaveFileWriter("test.wav", waveIn.WaveFormat);
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += OnRecordingStopped;
waveIn.StartRecording();
}
/// <summary>
/// 停止錄音
/// </summary>
private void StopRecording()
{
waveIn.StopRecording();
waveIn.Dispose();
}
/// <summary>
/// 錄音中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private 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);
int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);//錄音時間獲取
if (secondsRecorded >= 30)
{
StopRecording();
}
}
}
/// <summary>
/// 停止錄音
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnRecordingStopped(object sender, StoppedEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler<StoppedEventArgs>(OnRecordingStopped), sender, e);
}
else
{
if (waveIn != null) // 關閉錄音對象
{
waveIn.Dispose();
waveIn = null;
}
if (writer != null)//關閉文件流
{
writer.Close();
writer = null;
}
if (e.Exception != null)
{
MessageBox.Show(String.Format("出現問題 {0}",
e.Exception.Message));
}
}
}