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

 this_is_me活在自己小世界 发布于 2022-12-07 18:39

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

我读了很多关于AudioToolbox的内容,并在Objective-C中阅读了一些源代码示例.例如,我发现这一点:在10.6之后以编程方式设置Mac OS X卷

但我无法让它在Swift中运行.

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

1 个回答
  • (代码更新为Swift 4及更高版本,Swift 2和3版本可在编辑历史记录中找到.)

    这是我通过编程方式将答案转换为更改OS X系统卷在10.6(Snow Leopard)之后编程方式设置Mac OS X卷到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中使用10.11雨燕OS X的体积,而不使用过时AudioHardwareServiceSetPropertyData API的使用AudioObjectSetPropertyData() ,而不是过时的AudioHardwareServiceSetPropertyData().

    2022-12-11 02:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有