SimpleAudioPlayer 使用手册(一):介绍+快速入门
引言
.NET 生态中音频播放库的选择并不多。NAudio 功能完善但仅限 Windows,而跨平台方案往往需要引入庞大臃肿的依赖。SimpleAudioPlayer 以"小而美"为宗旨,用不到 4000 行 C# 代码 + 一个精简的 C 原生库,实现了跨平台的高性能音频播放、录制与流媒体支持。
项目地址:https://github.com/j4587698/SimpleAudioPlayer
技术栈
| 层次 | 技术 |
|---|---|
| 语言 | C# (.NET 8/9/10) + C99 (原生库) |
| 音频后端 | miniaudio (Public Domain,单头文件库) |
| 音频解码 | FFmpeg 7.1 (libavformat, libavcodec, libswresample, libavutil) |
| 原生互操作 | [LibraryImport] Source-Generated P/Invoke |
| 原生构建 | CMake 3.20+, MSYS2 MinGW (Windows), GCC/Clang (macOS/Linux) |
| NuGet 打包 | SimpleAudioPlayer.Native 作为预编译原生 NuGet 包分发 |
安装
dotnet add package SimpleAudioPlayer --version 2.3.1
最简单的播放
using SimpleAudioPlayer;
using SimpleAudioPlayer.Handles;
var player = new AudioPlayer();
player.Load(new FileStreamHandler("song.mp3"));
player.Play();
三步:创建播放器 -> Load(文件句柄) -> Play()。
播放控制
player.Play(); // 返回 bool,true 成功
player.Pause(); // 暂停
player.Stop(); // 停止(回到开头)
player.Seek(30); // 跳转到 30 秒
时间信息
double current = player.Time; // 当前秒数
double total = player.Duration; // 总时长秒数
音量
player.Volume = 0.5; // 0.0~1.0
事件
player.PlaybackStateChanged = state => Console.WriteLine(state);
player.PlaybackFailed = args => Console.WriteLine(args.Result);
player.PlayCompleted = () => Console.WriteLine("完成");
完整示例
using SimpleAudioPlayer;
using SimpleAudioPlayer.Handles;
var player = new AudioPlayer();
player.PlaybackStateChanged = state => Console.WriteLine($"状态: {state}");
player.PlaybackFailed = args => Console.WriteLine($"失败: {args.Result}");
player.PlayCompleted = () => Console.WriteLine("完成");
player.Load(new FileStreamHandler("song.mp3"));
Console.WriteLine($"时长: {player.Duration:F1}s");
player.Play();
Thread.Sleep(5000);
player.Stop();
player.Dispose();
错误处理
try {
player.Load(new FileStreamHandler("nonexistent.mp3"));
}
catch (InvalidOperationException ex) {
Console.WriteLine($"加载失败: {ex.Message}");
}
Dispose
using var player = new AudioPlayer();
// 或 player.Dispose()