用 C#实现录音功能
时间: 2023-07-12 09:05:54 浏览: 288
通过C#代码实现录音功能
在 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音频设置页面,允许应用程序访问麦克风。
阅读全文