当前位置: 首页 > 面试题库 >

使用Swift中的AudioToolbox访问OS X主卷

公孙宇
2023-03-14
问题内容

有没有从我的Swift应用程序中设置系统主音量的解决方案?

我阅读了很多有关AudioToolbox的内容,并阅读了Objective-C中的一些源示例。

但是我无法在Swift中使用它。

我在https://developer.apple.com/library/mac/documentation/AudioToolbox/Reference/AudioHardwareServicesReference/index.html#//apple_ref/c/func/AudioHardwareServiceGetPropertyData中缺少一些示例代码


问题答案:

(已为Swift 4和更高版本更新了代码,可以在编辑历史记录中找到Swift 2和3版本。)

这是从将 10.6(雪豹)以编程方 转换为OSX系统卷并以编程方式将Mac OSX卷设置为Swift(为简洁起见,省略错误检查)的答案得到的:

所需框架

import AudioToolbox

获取默认输出设备:

var defaultOutputDeviceID = AudioDeviceID(0)
var defaultOutputDeviceIDSize = UInt32(MemoryLayout.size(ofValue: defaultOutputDeviceID))

var getDefaultOutputDevicePropertyAddress = AudioObjectPropertyAddress(
    mSelector: kAudioHardwarePropertyDefaultOutputDevice,
    mScope: kAudioObjectPropertyScopeGlobal,
    mElement: AudioObjectPropertyElement(kAudioObjectPropertyElementMaster))

let status1 = AudioObjectGetPropertyData(
    AudioObjectID(kAudioObjectSystemObject),
    &getDefaultOutputDevicePropertyAddress,
    0,
    nil,
    &defaultOutputDeviceIDSize,
    &defaultOutputDeviceID)

设定音量:

var volume = Float32(0.50) // 0.0 ... 1.0
var volumeSize = UInt32(MemoryLayout.size(ofValue: volume))

var volumePropertyAddress = AudioObjectPropertyAddress(
    mSelector: kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,
    mScope: kAudioDevicePropertyScopeOutput,
    mElement: kAudioObjectPropertyElementMaster)

let status2 = AudioObjectSetPropertyData(
    defaultOutputDeviceID,
    &volumePropertyAddress,
    0,
    nil,
    volumeSize,
    &volume)

最后,为了完整起见,请获取以下内容:

var volume = Float32(0.0)
var volumeSize = UInt32(MemoryLayout.size(ofValue: volume))

var volumePropertyAddress = AudioObjectPropertyAddress(
    mSelector: kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,
    mScope: kAudioDevicePropertyScopeOutput,
    mElement: kAudioObjectPropertyElementMaster)

let status3 = AudioObjectGetPropertyData(
    defaultOutputDeviceID,
    &volumePropertyAddress,
    0,
    nil,
    &volumeSize,
    &volume)

print(volume)

为简便起见,已省略了错误检查。当然,应该在实际应用程序中检查状态返回值是否成功。

积分去 设置OS X量OS X 10.11雨燕采用不使用过时的AudioHardwareServiceSetPropertyDataAPI 的使用AudioObjectSetPropertyData(),而不是过时的AudioHardwareServiceSetPropertyData()

正如noamtm在评论中提到的那样,这也可以通过传递以下内容来获取和设置左右平衡

mSelector: kAudioHardwareServiceDeviceProperty_VirtualMasterBalance

AudioObjectPropertyAddress()



 类似资料:
  • 我正在尝试使用Gulp从主目录复制所选文件,但以下操作无法完成此操作: 什么是正确的设置为使其工作?文档对此非常简洁。

  • 在以前版本的OS X中,要允许运行AppleScript,需要在系统首选项的可访问性窗格中选中“启用辅助设备的访问”。 对于Mavericks,现在这是一个从安全启用的每个应用程序设置 我还尝试将所有应用程序添加到权限对话框中,但仍然收到权限拒绝错误。

  • 我有一个类似的问题,如何访问外部的领事UI,但我不能使网络选项的组合工作正确。 我在OSX上使用的是Docker for Mac,而不是老的Docker机器,也使用了官方的Consuler Docker镜像,而不是Progrium/Docker镜像。 我可以使用以下方法启动一个3节点服务器集群 到目前为止还不错,他们互相联系,工作很好。现在我想启动一个代理,并通过它查看UI。 我尝试了一堆-cli

  • 要限制对代码块的访问,模块和抽象是通过访问控制完成的。 可以根据访问控制机制的属性,方法,初始化程序和下标来访问类,结构和枚举。 协议中的常量,变量和函数受到限制,并允许通过访问控制作为全局和局部访问。 应用于属性,类型和功能的访问控制可称为“实体”。 访问控制模型基于模块和源文件。 模块被定义为单个代码分发单元,使用关键字导入。源文件定义为单个源代码文件,在模块中用于访问多种类型和功能。 Swi

  • 访问控制可以限定其他源文件或模块中代码对你代码的访问级别。 你可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、函数、初始化方法、基本类型、下标索引等设置访问级别。 协议也可以被限定在一定的范围内使用,包括协议里的全局常量、变量和函数。 访问控制基于模块与源文件。 模块指的是以独立单元构建和发布的 Framework 或 Application。在 Swift 中的一个

  • 问题内容: 我试图在Swift中访问temp目录。在Objective-C中,我可以使用以下代码进行操作: 但是,对于将类型从Objective-C转换为Swift 或从Swift转换为类型,我有些困惑 。我应该查看任何文件吗? 谢谢。 问题答案: 怎么样: 它没有回答您有关char *的问题,但它更干净… NSFileManager参考在这里。