目录
2、NuGet安装 NAudio 与 NAduio.Core包
前言
NAudio 是一个开源音频库,用于在 C# 应用程序中处理音频。
它提供了丰富的属性和方法,使我们能够轻松地读取、写入、转换及处理音频数据。
感兴趣的朋友们,可以一起来学习探索它的强大功能。
项目介绍
在.NET 平台上,NAudio 提供了丰富的音频操作功能。
它支持多种 API 进行音频播放与录制,兼容不同的音频格式,并能够进行音频格式转换(包括重采样、位深度调整、声道变换等)。另外,NAudio 还具备音频编码、多通道播放以及音频效果处理等多种功能。
项目说明
播放音频,我们可以使用 NAudio 库中的 WaveOutEvent 类。
以下是与音频播放相关的常用类和接口概述:
常用类
- WaveOut:表示波形输出,继承自 IWavePlayer,用于播放音频。它接受 IWaveProvider 作为播放源,并通过扩展方法支持 ISampleProvider 作为播放源。
- WaveIn:表示波形输入,继承自 IWaveIn,例如来自麦克风的输入或计算机正在播放的音频流。
- WaveStream:表示波形流,继承自 IWaveProvider,可以用作播放源。
- WaveFileReader:继承自 WaveStream,用于读取 .wav 文件。
- WaveFileWriter:继承自 Stream,用于写入文件,常用于保存音频录制的数据。
- AudioFileReader:通用音频文件读取器,除了 .wav 文件外,还可以读取其他类型的音频文件,如 .aiff 和 .mp3。
常用接口
- IWaveProvider:波形提供者,作为音频播放的提供者,可以通过扩展方法转换为 ISampleProvider。
- ISampleProvider:采样提供者,通过扩展方法可以作为 WaveOut 的播放源。
通过这些类和接口,NAudio 提供了灵活的方式来处理音频播放和录制。
项目示例
1、创建项目
dotnet new console -n DotNetCore.AudioExample
cd DotNetCore.AudioExample
2、NuGet安装 NAudio 与 NAduio.Core包
使用以下命令添加NAudio包到项目中,具体如下所示:
dotnet add package NAudio
或者在NuGet包管理器中,搜索NAudio或NAduio.Core(根据需求选择),然后点击安装。
3、使用说明
示例在.NET 6下,我们需要引用core版本。
4、录制文件代码
代码说明
1、WaveInEvent:用于从音频输入设备(如麦克风)捕获音频。
2、WaveFileWriter:用于将音频数据写入WAV文件。
3、waveIn.DataAvailable += (sender, e) =>:这是一个事件处理器的添加。当 waveIn 对象有可用的音频数据时,它会触发 DataAvailable 事件。
4、writer.Write(e.Buffer, 0, e.BytesRecorded):当有音频数据可用时,这段代码会被执行。它将音频数据从 e.Buffer 写入到WAV文件中。
5、waveIn.StartRecording() 和 waveIn.StopRecording():这两个方法分别用于开始和停止录音。
#region 1、录音示例
var isRecording = false;
var isPaused = false;
var fileName = $"{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.wav";
try
{
using var waveIn = new WaveInEvent();
using var writer = new WaveFileWriter(fileName, waveIn.WaveFormat);
waveIn.DataAvailable += (sender, e) =>
{
if (isRecording && !isPaused)
{
writer.Write(e.Buffer, 0, e.BytesRecorded);
}
};
Console.WriteLine("您好,欢迎使用录音软件,请按“R”键开始录制,按“P”键暂停/恢复,按“S”键停止。");
while (true)
{
var pressKey = Console.ReadKey(true).Key;
switch (pressKey)
{
case ConsoleKey.R:
if (!isRecording)
{
waveIn.StartRecording();
isRecording = true;
Console.WriteLine("录制已开始...");
}
break;
case ConsoleKey.P:
if (isRecording)
{
if (isPaused)
{
waveIn.StartRecording();
isPaused = false;
Console.WriteLine("录制已恢复...");
}
else
{
waveIn.StopRecording();
isPaused = true;
Console.WriteLine("录制已暂停...");
}
}
break;
case ConsoleKey.S:
if (isRecording)
{
waveIn.StopRecording();
isRecording = false;
isPaused = false;
Console.WriteLine("录制已停止...");
}
return; // 退出循环和程序
default:
Console.WriteLine("无效的按键。请按“R”开始录制,按“P”暂停/恢复,按“S”停止。");
break;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"发生错误:{ex.Message}");
}
#endregion
运行效果
启动按R开始录音,按P暂停和恢复,按S停止,具体如下图所示:
当前录音文件默认存储于 bin 目录下。可以查看生成的录音文件。
5、播放文件代码
定义变量
// 音频播放器实例
private static WaveOutEvent waveOut;
// 音频文件读取实例
private static WaveFileReader reader;
// 默认音频文件路径
private const string DefaultFilePath = @"D:\demo.wav";
定义播放方法
/// <summary>
/// 初始化音频播放器
/// </summary>
static void InitializeAudioPlayer()
{
waveOut = new WaveOutEvent();
}
/// <summary>
/// 播放音频文件
/// </summary>
/// <param name="filePath"></param>
static void PlayAudio(string filePath)
{
try
{
reader?.Dispose();
reader = new WaveFileReader(filePath);
waveOut.Init(reader);
waveOut.Volume = 1.0f;
waveOut.Play();
Console.WriteLine("正在播放音频文件... ");
}
catch (Exception ex)
{
Console.WriteLine($"播放音频时出错: {ex.Message}");
}
}
/// <summary>
/// 暂停播放
/// </summary>
static void PausePlayback()
{
if (waveOut != null && waveOut.PlaybackState == PlaybackState.Playing)
{
waveOut.Pause();
Console.WriteLine("暂停播放...");
}
}
/// <summary>
/// 恢复播放
/// </summary>
static void ResumePlayback()
{
if (waveOut != null && waveOut.PlaybackState == PlaybackState.Paused)
{
waveOut.Play();
Console.WriteLine("恢复播放...");
}
}
/// <summary>
/// 停止播放
/// </summary>
static void StopPlayback()
{
if (waveOut != null && (waveOut.PlaybackState == PlaybackState.Playing || waveOut.PlaybackState == PlaybackState.Paused))
{
waveOut.Stop();
reader?.Close();
Console.WriteLine("已停止播放...");
}
}
调用播放
//初始化音频播放器
InitializeAudioPlayer();
//播放默认音频文件
PlayAudio(DefaultFilePath);
Console.WriteLine("您好,请按“P”键暂停,按“R”键恢复,按“S”键停止,或按任何其他键退出。");
while (true)
{
var key = Console.ReadKey(true).Key;
switch (key)
{
case ConsoleKey.P:
PausePlayback();
break;
case ConsoleKey.R:
ResumePlayback();
break;
case ConsoleKey.S:
StopPlayback();
return;
default:
return;
}
}
运行效果
程序启动自动播放文件,按P键暂停播放,按R键恢复播放,按S键停止播放并退出,具体如下图所示:
6、注意
以上内容仅为简单示例。如需实现更多功能,可以根据具体需求进行定制开发。
以下是一些可能的扩展方向:
- 多格式支持:除了 WAV 格式,可以支持 MP3、FLAC、AAC 等其他音频格式,以适应不同的应用场景。
- 实时预览:在录音过程中提供实时音频预览功能,以便实时监控录音质量和调整录音设置。
- 语音识别:集成语音识别功能,将录音转换为文本,适用于会议记录、采访整理等场合。
- 网络传输:将录音文件上传至云端服务器或其他设备,便于远程访问和备份。
- 定时录音:设置定时录音功能,自动在指定时间开始录音,适合无人值守的应用场景。
- 界面优化:增加图形用户界面(GUI),使操作更加直观便捷,提升用户体验。
- 多通道录音:支持多通道录音,适用于专业音频制作场景,如音乐会录制、电影配乐等。
- 高级设置:提供高级录音设置选项,如采样率、比特率、编码格式等参数调整,以满足专业用户的特定需求。
根据具体应用场景,可以选择上述功能中的部分或全部进行扩展,以满足更复杂的需求。
同时,也可以结合其他技术,如人工智能、云计算等,进一步增强应用的功能和性能。
项目总结
NAudio 是一款功能强大的 .NET 音频处理库,提供了丰富的工具和类,用于音频播放、录音、编辑和处理等多种应用场景。
希望本文能为朋友们在音频处理方面的开发带来帮助。欢迎大家在评论区留言讨论,分享您的经验和建议。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!
标签:Console,NAudio,waveOut,录音,WriteLine,NET,播放,音频 From: https://blog.csdn.net/u012573563/article/details/142361884