【问题标题】:Set OS X volume in OS X 10.11 using Swift without using the deprecated AudioHardwareServiceSetPropertyData API使用 Swift 在 OS X 10.11 中设置 OS X 音量,而不使用已弃用的 AudioHardwareServiceSetPropertyData API
【发布时间】:2016-08-25 12:52:23
【问题描述】:

我找到this code 使用 Swift 设置系统音量。在操场上使用代码时,我收到了警告。

AudioHardwareServiceSetPropertyData 在 OS X 10.11 中已弃用

如何更新 OS X 10.11 的代码?

谢谢。 :)

【问题讨论】:

    标签: swift volume osx-elcapitan


    【解决方案1】:

    我还不能发表评论,因此我将其作为单独的答案发布。我已将出色的 ISSoundAdditions 更新为真正的 Swift 5,并为其提供了一个不错的公共接口,您可以通过该接口通过获取和设置 NSSound 的类属性来管理系统卷——示例:

    NSSound.systemVolume += 0.2
    NSSound.systemVolumeIsMuted = true
    

    作为一个小礼物,您可以将系统音量静音(并且在后台不阻塞):

    NSSound.systemVolumeFadeToMute(seconds: 5.0, blocking: false)
    

    查看:GitHub NSSound_SystemVolumeExtension

    【讨论】:

      【解决方案2】:

      正如 this answer 中对类似的 Objective-C 问题所建议的那样,我建议使用 ISSoundAdditions,您可以像这样从 Swift 中调用它:

      NSSound.setSystemVolume(0.5)
      

      ISSoundAdditions.m 中-setSystemVolume begins around line 113 的实现,以防您对它们如何完成设置系统音量感到好奇。

      为了澄清对我的回答的一个有争议的评论(显然已删除),在使用 El Capitan SDK 进行编译时,在 ISSoundAdditions 中不使用已弃用的 API - 不使用 AudioHardwareServiceSetPropertyData。如果使用已弃用的AudioHardwareServiceSetPropertyDataAudioObjectSetPropertyData 确实是应该切换到的 API,尽管从我链接到的 ISSoundAdditions 实现中可以看出,涉及到一些工作(因此我首先链接到实现) .

      【讨论】:

      • 感谢您的回复。当我将 'AudioHardwareServiceSetPropertyData' 替换为 'AudioObjectSetPropertyData' 时,我的代码也可以正常工作,但是因为您推荐的 Addition 更易于使用,所以我会考虑实施 Addition。谢谢。 :)
      猜你喜欢
      • 2015-02-02
      • 2013-11-19
      • 2014-12-15
      • 2016-05-31
      • 1970-01-01
      • 2015-08-26
      • 2016-12-22
      • 1970-01-01
      • 2016-01-12
      相关资源
      最近更新 更多