c#NAudio 录音功能实现

1.首先新建引用类  RecordController  //From:www.uzhanbao.com

public class RecordController
{
public WaveIn mWavIn;
public WaveFileWriter mWavWriter;

/// <summary>
/// 开始录音
/// </summary>
/// <param name="filePath"></param>
public void StartRecord(string filePath)
{
mWavIn = new WaveIn();
mWavIn.DataAvailable += MWavIn_DataAvailable;
// mWavIn.RecordingStopped += MWavIn_RecordingStopped; 有冲突
mWavWriter = new WaveFileWriter(filePath, mWavIn.WaveFormat);
mWavIn.StartRecording();
}

/// <summary>
/// 停止录音
/// </summary>
public void StopRecord()
{
mWavIn?.StopRecording();
mWavIn?.Dispose();
mWavIn = null;
mWavWriter?.Close();
mWavWriter = null;
}

//这个方法在调用关闭时会有冲突

private void MWavIn_RecordingStopped(object sender, StoppedEventArgs e)
{
//mWavIn?.Dispose();
//mWavIn = null;
//mWavWriter?.Close();
//mWavWriter = null;
}

private void MWavIn_DataAvailable(object sender, WaveInEventArgs e)
{
mWavWriter.Write(e.Buffer, 0, e.BytesRecorded);
int secondsRecorded = (int)mWavWriter.Length / mWavWriter.WaveFormat.AverageBytesPerSecond;
}
}

 

2.在主界面引用  RecordController record = new RecordController();

/// <summary>
/// 耳机sidetone测试
/// </summary>
/// <param name="i"></param>
public void Sidetone(int i)
{
string[] row = getlistviewitem(i);
record.StartRecord("e:\\rec.wav");
if (MessageBox.Show("正在录音,点击是播放录音", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
{
record.StopRecord();
ErrorFlag = false;
row[6] = "FAIL";
}
else
{
record.StopRecord();
string path = "e:\\rec.wav";//.wav音频文件路径
System.Media.SoundPlayer player = new System.Media.SoundPlayer(path);
player.Play();

if (MessageBox.Show("是否有录音", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
{
ErrorFlag = false;
row[6] = "FAIL";
}
else
{
ErrorFlag = true;
row[5] = "OK";
row[6] = "PASS";
}
}
listupdate(row, i);
}

完成代码后测试是能正常录音

C#实现录音功能需要用到.NET Framework提供的NAudio库。以下是一个简单的示例代码,可以在Windows操作系统中录制音频并保存为WAV文件: ```csharp using NAudio.Wave; // 创建音频捕获对象 WaveIn waveIn = new WaveIn(); waveIn.DeviceNumber = 0; // 设置采集设备,默认为第一个 waveIn.WaveFormat = new WaveFormat(44100, 1); // 设置采样率和通道数 // 创建音频写入对象 WaveFileWriter writer = new WaveFileWriter("output.wav", waveIn.WaveFormat); // 注册音频捕获数据事件 waveIn.DataAvailable += (sender, e) => { // 将音频数据写入文件 writer.Write(e.Buffer, 0, e.BytesRecorded); }; // 开始录制 waveIn.StartRecording(); // 等待录制完成 Console.WriteLine("正在录制,请按任意键结束..."); Console.ReadKey(); // 停止录制 waveIn.StopRecording(); // 关闭音频写入对象 writer.Close(); ``` 在上面的示例中,我们首先创建了一个`WaveIn`对象并设置了采集设备和采样率等参数。然后创建了一个`WaveFileWriter`对象,用于将音频数据写入WAV文件。接着注册了音频捕获数据事件,当音频数据可用时将其写入文件。最后开始录制,并等待用户按下任意键结束录制。 注意:在录制音频时需要获取麦克风的访问权限。如果没有权限,可以在程序中请求权限。例如: ```csharp if (WaveIn.DeviceCount == 0) { Console.WriteLine("未检测到音频设备!"); return; } // 请求麦克风访问权限 bool isPermissionGranted = WaveIn.DeviceCount > 0 && WaveIn.DeviceCount == WaveIn.DeviceCount; if (!isPermissionGranted) { var dialogResult = MessageBox.Show("请允许访问麦克风!", "权限不足", MessageBoxButtons.OKCancel); if (dialogResult == DialogResult.OK) { Process.Start("control", "mmsys.cpl,,1"); } else { return; } } ``` 在上面的代码中,我们使用`WaveIn.DeviceCount`获取系统中可用的音频设备数量。如果数量为0,则提示用户未检测到音频设备;否则,判断是否已经获得麦克风访问权限。如果没有权限,则弹出对话框请求权限。用户点击“确定”按钮后,可以打开Windows音频设置页面,允许应用程序访问麦克风。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值