當前位置:編程學習大全網 - 編程語言 - C#如何可靠而又簡易地實現錄音功能?

C#如何可靠而又簡易地實現錄音功能?

using NAudio.Wave;

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));

}

}

}

  • 上一篇:教育龍頭股排名前十
  • 下一篇:許揚的個人經歷
  • copyright 2024編程學習大全網