Skip to content

mute

设置静音状态

mute:SUDRTGameAudioSession 协议中的音频开关方法。它用于在软件层面上立即开启或关闭当前游戏实例的所有音频输出。该方法提供了一个全局性的“一键禁音”功能,常用于 App 切换至后台、用户开启免打扰模式或触发特定业务逻辑(如接听电话)的场景。


方法声明

objc
/**
 * 设置游戏音频静音或恢复播放。
 * @param mute YES 表示立即静音;NO 表示恢复之前的音量播放。
 */
- (void)mute:(BOOL)mute;

运行行为

  1. 全局拦截:当参数为 YES 时,SDK 会切断所有游戏音轨的输出。这不影响游戏逻辑的运行,仅阻断音频流向系统混音器。
  2. 音量保持:调用 mute:YES 并不会修改 VolumeFactor 的值。当重新调用 mute:NO 恢复声音时,游戏音量将自动回到静音前的缩放比例。
  3. 状态隔离:此静音开关仅对当前 SDK 实例有效,不会影响 iOS 系统(AVAudioSession)中其他 App 的声音播放。
  4. 非持久化:该状态通常随游戏实例的销毁而失效。如果希望玩家下次进入游戏依然保持静音,App 侧需自行记录该配置。

代码示例

在 App 监听到系统电话呼入时,自动静音游戏:

objc
- (void)handleIncomingCall {
    // 1. 业务逻辑触发时,立即静音游戏
    if (![self.audioSession isMute]) {
        [self.audioSession mute:YES];
        NSLog(@"检测到外部干扰,游戏已自动静音");
    }
}

- (void)onMuteToggleChanged:(UISwitch *)sender {
    // 2. 根据 UI 开关状态设置静音
    [self.audioSession mute:sender.isOn];
}

注意事项

  • 与硬件静音的区别:该方法控制的是“软件静音”。如果用户通过 iPhone 侧边的物理静音键开启了静音,即便调用 mute:NO,游戏可能依然无声(取决于 SUDRT_KEY_AUDIO_OBEY_MUTE_SWITCH 的配置)。
  • 性能建议:在短时间内频繁调用 mute: 可能会导致底层的音频管线重复初始化。建议在 UI 层做好防抖处理。
  • 状态查询:在执行逻辑前,可以先通过 isMute 方法判断当前状态,避免重复设置同一状态。