编辑
2025-09-29
C#
00

目录

摘要
正文
nuget 安装 NAudio,与NAduio.Core
播放音频
常用类:
常用接口:
Wav文件播放
Mp3文件播放
录音
录制声卡输出

摘要

NAudio是一个开源的音频库,用于在C#应用程序中处理音频。它提供了许多方便的属性和方法,使开发人员能够轻松地读取、写入、转换和处理音频数据。

正文

nuget 安装 NAudio,与NAduio.Core

image.png

image.png

这个例子是在.net 6下,所以需要引用core版本。

播放音频

要播放音频,我们可以使用NAudio的WaveOutEvent类。以下是一些常用的属性和方法:

常用类:

  • WaveIn 表示波形输入, 继承了 IWaveIn, 例如麦克风输入, 或者计算机正在播放的音频流。
  • WaveOut 表示波形输出, 继承了 IWavePlayer, 用来播放音频, 以 IWaveProvider 作为播放源播放音频, 通过拓展方法也支持以 ISampleProvider 作为播放源播放音频。
  • WaveStream 表示波形流, 它继承了 IWaveProvider, 可以用来作为播放源。
  • WaveFileReader 继承了 WaveStream, 用来读取波形文件。
  • WaveFileWriter 继承了Stream, 用来写入文件, 常用于保存音频录制的数据。
  • AudioFileReader 通用的音频文件读取器, 可以读取波形文件, 也可以读取其他类型的音频文件例如 Aiff, MP3

常用接口:

  • IWaveProvider 波形提供者, 上面已经提到, 是音频播放的提供者, 通过拓展方法可以转换为 ISampleProvider。
  • ISampleProvider 采样提供者, 上面已经提到, 通过拓展方法可以作为 WaveOut 的播放源。

Wav文件播放

C#
WaveOut wout = new WaveOut(); WaveFileReader read; private void btnPlay_Click(object sender, EventArgs e) { read = new WaveFileReader("D:\\BaiduSyncdisk\\11Test\\sa1.wav"); wout.Init(read);//音频输出初使化 wout.Volume = 1.0f;//调整声音 wout.Play();//播放 } private void btnPause_Click(object sender, EventArgs e) { wout.Pause();//暂停播放 } private void btnResume_Click(object sender, EventArgs e) { wout.Resume();//继续播放 } private void btnStop_Click(object sender, EventArgs e) { wout.Stop();//停止播放 read.Close(); }

image.png

Mp3文件播放

C#
WaveOut wout = new WaveOut(); Mp3FileReader read;//只需要修改这个 private void btnPlay_Click(object sender, EventArgs e) { read = new Mp3FileReader("D:\\BaiduSyncdisk\\11Test\\a.mp3"); wout.Init(read);//音频输出初使化 wout.Volume = 1.0f;//调整声音 wout.Play();//播放 }

只需要修改read就可以了

录音

C#
WaveIn wavin; WaveFileWriter write; private void btnRecord_Click(object sender, EventArgs e) { wavin = new WaveIn(); wavin.WaveFormat = new WaveFormat(44100, 1); write = new WaveFileWriter("d:\\a.wav", wavin.WaveFormat); wavin.DataAvailable += (s, e) => { write.Write(e.Buffer, 0, e.BytesRecorded); }; wavin.StartRecording(); } private void btnStop_Click(object sender, EventArgs e) { wavin.StopRecording(); write.Close(); }

image.png

录制声卡输出

也就是录制计算机正在播放的声音, 借助 WasapiLoopbackCapture 即可简单实现

C#
WasapiLoopbackCapture wavin; WaveFileWriter write; private void btnRecord_Click(object sender, EventArgs e) { wavin = new WasapiLoopbackCapture(); wavin.WaveFormat = new WaveFormat(44100, 1); write = new WaveFileWriter("d:\\a.wav", wavin.WaveFormat); wavin.DataAvailable += (s, e) => { write.Write(e.Buffer, 0, e.BytesRecorded); }; wavin.StartRecording(); } private void btnStop_Click(object sender, EventArgs e) { wavin.StopRecording(); write.Close(); }

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!