概述

AudioPlayer 接受 AudioPlayerOptions 参数精细控制输出设备。默认配置适合大多数场景。

using var player = new AudioPlayer(); // 默认配置
using var player = new AudioPlayer(new AudioPlayerOptions { ... });

⚠️ 真正跨平台通用的只有 SampleFormat / Channels / SampleRate / ShareMode 四项。LatencyMode / Usage / ContentType 的效果局限于特定平台,详见各节说明。

AudioPlayerOptions 详解

public class AudioPlayerOptions
{
    public SampleFormat SampleFormat { get; init; } = SampleFormat.F32;
    public uint Channels { get; init; } = 2;
    public uint SampleRate { get; init; } // 0 = 设备原生
    public AudioLatencyMode LatencyMode { get; init; } = AudioLatencyMode.Playback;
    public AudioPlaybackUsage Usage { get; init; } = AudioPlaybackUsage.Media;
    public AudioContentType ContentType { get; init; } = AudioContentType.Music;
    public AudioShareMode ShareMode { get; init; } = AudioShareMode.Shared;
    public uint PeriodSizeInMilliseconds { get; init; } // 0 = 自动
    public uint Periods { get; init; } // 0 = 自动
}

各字段详解与平台影响

SampleFormat

说明

SampleFormat.U8

无符号 8-bit

SampleFormat.S16

有符号 16-bit (CD 品质)

SampleFormat.S24

有符号 24-bit

SampleFormat.S32

有符号 32-bit

SampleFormat.F32

32-bit 浮点(默认,推荐)

全平台生效。直接传递给 miniaudio 的 ma_device_config.playback.format,控制音频管线的 PCM 数据类型。

Channels

全平台生效0 = 设备默认声道数。

SampleRate

全平台生效0 = 设备原生采样率。非 0 时 miniaudio 会尝试使用该采样率,若设备不支持则自动重采样。

LatencyMode

public enum AudioLatencyMode
{
    LowLatency = 0,
    Playback   = 1  // 默认
}

⚠️ AudioLatencyMode.Playback 对应 C 端 AUDIO_PERFORMANCE_PROFILE_CONSERVATIVE。命名虽不一致但行为正确。

平台

LowLatency 效果

Windows WASAPI

✅ 使用事件驱动回调降低延迟

Linux ALSA

❌ 被忽略

macOS CoreAudio

❌ 被忽略

Android AAudio

⚠️ 部分有效,受设备约束

Android OpenSL ES

❌ 被忽略

结论:低延迟主要靠调 PeriodSizeInMilliseconds。LatencyMode 仅 Windows 有效。

var player = new AudioPlayer(new AudioPlayerOptions {
    LatencyMode = AudioLatencyMode.LowLatency
});

Usage

public enum AudioPlaybackUsage
{
    Default = 0,
    Media = 1,            // 默认
    Game = 2,
    VoiceCommunication = 3,
    Notification = 4,
    Alarm = 5
}

平台

映射效果

Windows WASAPI

⚠️ 仅 Game 有效,设置 ma_wasapi_usage_games(禁用音频增强)

Linux

❌ 被忽略

macOS

❌ 被忽略

Android AAudio

✅ 映射到 AAudio usage 字段(media/game/voice/notification/alarm)

Android OpenSL ES

✅ 映射到 stream type(media/voice/notification/alarm)

// Windows: Game 禁用音频增强降延迟
// Android: 系统据此调整音频路由和策略
var player = new AudioPlayer(new AudioPlayerOptions {
    Usage = AudioPlaybackUsage.Game
});

ContentType

public enum AudioContentType
{
    Default = 0,
    Music = 1,       // 默认
    Speech = 2,
    Movie = 3,
    Sonification = 4
}

平台

映射效果

Windows WASAPI

❌ 被忽略

Linux

❌ 被忽略

macOS

❌ 被忽略

Android AAudio

✅ 映射到 AAudio contentType(music/speech/movie/sonification)

Android OpenSL ES

❌ 被忽略

结论:ContentType 仅在 Android AAudio 上有效,影响系统音频处理策略。在其他平台设置此字段无效果。

ShareMode

public enum AudioShareMode
{
    Shared = 0,    // 默认
    Exclusive = 1
}

平台

Exclusive 效果

Windows WASAPI

✅ 独占设备,绕过混音器,最低延迟

Linux ALSA

✅ 直接硬件访问

macOS CoreAudio

⚠️ 部分支持

Android

⚠️ 部分设备不支持

跨平台基本有效。独占模式延迟最低,但其他应用无声。

PeriodSizeInMilliseconds / Periods

全平台生效,但后端可能舍入。0 = 由后端自动选择。

  • 值越小 → 延迟越低 → CPU 越高 → 越可能爆音

  • 总延迟 ≈ PeriodSize × Periods

// 低延迟: 20ms × 2 = 40ms 总缓冲
new AudioPlayerOptions {
    PeriodSizeInMilliseconds = 20,
    Periods = 2
};
// 稳定: 80ms × 3 = 240ms 总缓冲
new AudioPlayerOptions {
    PeriodSizeInMilliseconds = 80,
    Periods = 3
};

音量控制

player.Volume 属性基于 miniaudio 的 ma_device_set_master_volume,范围 0.0~1.0:

player.Volume = 0.75;

实战场景

音乐播放器(默认配置即可)

new AudioPlayer(); // 默认值已是最佳配置

游戏音频(低延迟)

new AudioPlayer(new AudioPlayerOptions {
    LatencyMode = AudioLatencyMode.LowLatency, // Windows 有效
    Usage = AudioPlaybackUsage.Game,           // Windows/Android 有效
    PeriodSizeInMilliseconds = 30,
    Periods = 2
});

VoIP 通信

new AudioPlayer(new AudioPlayerOptions {
    LatencyMode = AudioLatencyMode.LowLatency,
    Usage = AudioPlaybackUsage.VoiceCommunication, // Android 有效
    SampleRate = 16000,
    PeriodSizeInMilliseconds = 20,
    Periods = 2
});

高解析度音频(独占模式防重采样)

new AudioPlayer(new AudioPlayerOptions {
    ShareMode = AudioShareMode.Exclusive,
    SampleRate = 96000 // 设备必须支持
});

快速参考

字段

跨平台

主要影响平台

实际效果

SampleFormat

全部

PCM 数据类型

Channels

全部

声道数

SampleRate

全部

输出采样率

LatencyMode

Windows

WASAPI 事件驱动

Usage

Android+Win

音频路由/策略

ContentType

Android

音频质量预设

ShareMode

全部(有差异)

独占/共享

PeriodSize

全部(可舍入)

缓冲大小

Periods

全部(可舍入)

缓冲分段数