NAudio实战上手:5分钟搭出能用的音频播放器
NAudio实战上手:5分钟搭出能用的音频播放器
【免费下载链接】NAudioAudio and MIDI library for .NET项目地址: https://gitcode.com/gh_mirrors/na/NAudio
每次处理音频都要手写底层 API 调用?NAudio 是 .NET 的开源音频与 MIDI 库,把播放、录音、格式转换封装成几行代码。
能力速览
| 你能完成的任务 | 一句话说明 |
|---|---|
| 播放音频 | WASAPI、WaveOut、ASIO、DirectSound,Linux 走 ALSA |
| 录音 | 麦克风采集、系统声音环回、ASIO 双工 |
| 读写音频文件 | WAV、MP3、FLAC、Opus 等,跨平台基于 libsndfile |
| 格式转换 | 改声道、位深、采样率,编码成 MP3/WMA 等 |
| 效果与 MIDI | 跨平台 Effects 效果框架、SoundFont 采样器、MIDI 文件读写 |
最短上手路径
1. 安装 NAudio 只需一条命令
dotnet add package NAudio元包会拉齐 Windows 全家桶;在非 Windows 目标框架上自动只解析跨平台部分。
2. 用 AudioFileReader 打开任意音频文件
AudioFileReader 负责识别格式并解码,输出一条浮点采样流(持续产出 32 位浮点采样的数据源,后续处理统一用它)。
3. 把采样流接到输出设备
Windows 上创建 WasapiPlayer 并调用播放方法,Linux 上改用 AlsaOut,其余代码不变。
4. 跑通后你会看到什么
扬声器出声,播放器对象暴露暂停、恢复、停止等属性,可以随时中断并重新起播。没声音就先枚举一遍输出设备确认名字。
按场景拆解用法
做本地音乐播放器
AudioFileReader 管解码,WasapiPlayer 管输出,播放进度、暂停、快进都是它的现成属性,不用自己维护缓冲。
采集麦克风输入
Windows 首选 WasapiRecorder,采集到的数据可以直接交给 SoundFileWriter 写成文件;Linux 上用 AlsaIn,思路相同。
读写 MIDI 文件
MidiFile 负责标准 MIDI 文件的读取与保存,事件模型支持把文件内容重排、转换后再写回。
避坑与调试
播放一段时间后内存只涨不跌原因:WaveStream、播放器都实现了 IDisposable,忘了释放。 处理:统一用 using 包裹,停止时先 Stop 再 Dispose。
插拔耳机后卡住或抛异常原因:系统默认设备变了,旧音频端点失效。 处理:监听设备变更事件,重新获取设备后再起播。
ASIO 低延迟下爆音、断续原因:ASIO 回调是实时线程,里面有分配内存或加锁的重活。 处理:回调内只做拷贝和计算,缩小缓冲前先检查设备支持的粒度。
延伸与社区
- 演示程序:samples/NAudioDemo/(WinForms)、samples/NAudioWpfDemo/(WPF)
- 任务式教程:Docs/,例如 Docs/PlayAudioFileConsoleApp.md
- 小工具:samples/AudioFileInspector/ 查看文件元数据,samples/MixDiff/ 对比两个音频
- 问题反馈走项目仓库的 Issue 区,报错时附上设备和 .NET 版本。
适合做播放器、录音与音频处理工具的 .NET 开发者。
【免费下载链接】NAudioAudio and MIDI library for .NET项目地址: https://gitcode.com/gh_mirrors/na/NAudio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
