全局状态管理

除了对单个音频实例进行控制外,Yumo audio 还提供了全局状态管理机制,允许一次性控制所有正在播放的音频。

全局音频控制信号

库在 yumo 命名空间下提供了一个全局变量 global,类型为 yumo::audioSign:

namespace yumo {
    class audioSign {
    public:
        switchSign mute{false};   // 静音
        switchSign stop{false};   // 停止(挂起)
        volumeSign volume{1.0f};  // 音量(0.0-1.0)
    };

    inline yumo::audioSign global;
}

成员说明

成员 类型 默认值 说明
mute switchSign (atomic<bool>) false 全局静音开关
stop switchSign (atomic<bool>) false 全局停止/挂起开关
volume volumeSign (atomic<float>) 1.0f 全局音量倍率

Note

mute、stop 和 volume 均使用 yumo::atomic 模板类封装,因此是线程安全的,可以在任何线程中安全访问。有关原子类的详细信息,请参考原子类与其typedef。

全局静音

通过设置global.mute为true,可以将所有正在播放的音频设置为静音状态。与单个实例的 setMuted 不同,全局静音作用于所有音频。

示例

yumo::global.mute = true;
yumo::global.mute = false;

效果

  • 静音时:所有音频不输出声音,但播放位置继续推进。静音效果强行覆盖所有播放实例。
  • 取消静音后:音频从当前位置继续播放。覆盖效果失效。

Note

注1:全局静音与为每个播放实例分别设置静音效果相同,但实际使用推荐使用全局静音,因为这样库会直接跳过混音过程,节省效率。

Note

注2:静音效果强行覆盖所有播放实例,取消后,恢复实例在静音前的静音设置。如果静音期间做出了修改,则采用修改后的静音设置。

全局停止

通过设置global.stop为true,可以暂停所有正在播放的音频。与单个实例的 stop 不同,全局停止作用于所有音频。

示例

yumo::global.stop = true;
yumo::global.stop = false;

效果

  • 停止时:所有音频不输出声音,且播放位置不推进
  • 恢复后:音频从暂停位置继续播放

与全局静音相似的,全局停止会覆盖所有单个播放实例的停止设置。

Note

全局停止与为每个播放实例分别设置停止效果相同,但实际使用推荐使用全局停止,因为这样库会直接跳过混音过程,节省效率。

全局音量

global.volume 作为一个乘法因子应用于所有音频的播放音量。音频实际音量 = 实例音量 × 全局音量。

示例

yumo::global.volume = 0.5f;
float currentVolume = yumo::global.volume.load();

音量计算

实际播放音量 = 实例音量 (instance.volume) × 全局音量 (global.volume)

例如:

  • 实例音量为 0.8,全局音量为 0.5,实际播放音量为 0.4
  • 实例音量为 1.0,全局音量为 0.0,实际播放音量为 0.0(等效静音)

Tip

可以通过将 global.volume 设置为 0.0 来实现全局静音的效果,但这样混音环节不会被跳过且会一一计算,效率低下。

最后一次修改时间:2026-08-03 17:35