using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NAudio.Wave;
using System.IO;
namespace WindowsVIKI
{
public class NAudioRecorder
{
public WaveIn waveSource = null;
public WaveFileWriter waveFile = null;
private string fileName = string.Empty;
/// <summary>
/// 开始录音
/// </summary>
public void StartRec()
{
try
{
waveSource = new WaveIn();
waveSource.WaveFormat = new WaveFormat(16000, 16, 1); // 16bit,16KHz,Mono的录音格式
waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
waveFile = new WaveFileWriter(fileName, waveSource.WaveFormat);
waveSource.StartRecording();
}
catch { }
}
/// <summary>
/// 停止录音
/// </summary>
public void StopRec()
{
// waveSource.StopRecording();
if (waveSource != null)
{
waveSource.Dispose();
waveSource = null;
}
if (waveFile != null)
{
waveFile.Dispose();
waveFile = null;
}
}
/// <summary>
/// 停止录音
/// </summary>
public void PauseRec()
{
waveSource.StopRecording();
}
/// <summary>
/// 录音结束后保存的文件路径
/// </summary>
/// <param name="fileName">保存wav文件的路径名</param>
public void SetFileName(string fileName)
{
this.fileName = fileName;
}
/// <summary>
/// 开始录音回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveFile != null)
{
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
waveFile.Flush();
try
{
if(Form1._record_status == Form1.RecordStatus.On){
Form1.wss_viki.Send(e.Buffer);
}
}
catch (Exception ex) {
Form1._record_status = Form1.RecordStatus.Off;
}
}
}
/// <summary>
/// 录音结束回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void waveSource_RecordingStopped(object sender, StoppedEventArgs e)
{
if (waveSource != null)
{
waveSource.Dispose();
waveSource = null;
}
if (waveFile != null)
{
waveFile.Dispose();
waveFile = null;
}
}
}
} /// <summary>
/// 录音对象
/// </summary>
NAudioRecorder recorder;
outputFolder = System.Windows.Forms.Application.StartupPath;
Directory.CreateDirectory(outputFolder);
var currentFileName = String.Format("viki-{0:yyy-MM-dd HH-mm-ss}.wav", DateTime.Now);
audioFile = Path.Combine(outputFolder + "/record_file/", currentFileName);
recorder = new NAudioRecorder();
recorder.SetFileName(audioFile);引用控件下载:NAudio.dll
发表评论