SimpleAudioPlayer 使用手册(一):介绍+快速入门

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()
posted @ 2026-08-03 13:42  jvx  阅读(34)  评论(0)    收藏  举报