Skip to content

setVolumeFactor

设置音量缩放因子

setVolumeFactor:SUDRTGameAudioSession 协议中的音量控制方法。它用于在不改变 iOS 系统主音量(Media Volume)的前提下,调整游戏内部音频输出的相对增益。通过该方法,App 可以实现游戏声音与背景音乐的混音平衡,或为用户提供独立的音量调节滑块。


方法声明

objc
/**
 * 设置音量缩放因子。
 * @param factor 缩放比例。0.0 表示软件静音,1.0 表示原始音量。
 */
- (void)setVolumeFactor:(float)factor;

运行行为

  1. 乘法增益:该因子与游戏原始音量及系统音量相乘。最终输出音量 = 游戏原始音量 × factor × 系统主音量。
  2. 非线性调节:通常建议在 UI 层将线性滑块值转换为对数刻度,以获得更符合人体工程学的听感变化。
  3. 即时生效:调用后,SDK 引擎会立即调整混音器的输出增益,无需重启音频会话。
  4. 状态隔离:此设置仅对当前 SDK 实例管理的音频有效,不会影响手机中其他正在运行的 App。

代码示例

实现一个简单的音量调节逻辑,将 UI 滑块的值同步到游戏:

objc
- (void)onVolumeSliderChanged:(UISlider *)slider {
    // 1. 获取滑块数值 (假设范围是 0.0 ~ 1.0)
    float volumeFactor = slider.value;
    
    // 2. 将因子设置给 SDK 音频会话
    if (self.audioSession) {
        [self.audioSession setVolumeFactor:volumeFactor];
        
        NSLog(@"已将游戏音量因子调整为: %.2f", volumeFactor);
    }
}

注意事项

  • 范围建议:虽然参数类型为 float,但通常建议将其限制在 0.0(无声)到 1.0(满音量)之间。设置超过 1.0 可能会导致音频剪切(Clipping)并产生杂音。
  • 与静音叠加:即便设置 factor1.0,如果之前调用过 mute:YES,游戏依然不会发出声音。
  • 持久化:SDK 实例销毁后,该因子通常不会自动保存。如果需要用户下次进入游戏时保持音量,App 侧需自行持久化存储该数值(如使用 NSUserDefaults)。