2014-12-04 51 views
3

我读了很多关于AudioToolbox的内容,并阅读了obj-c中的一些源代码示例。 但我无法在Swift中使用它。如何从osx中的swift应用程序设置系统主音量

有人可以指点我的解决方案如何从我的swift应用程序设置主音量?

例如这个例子:Setting Mac OSX Volume Programatically using XCode 我缺少https://developer.apple.com/library/mac/documentation/AudioToolbox/Reference/AudioHardwareServicesReference/index.html#//apple_ref/c/func/AudioHardwareServiceGetPropertyData的一些示例代码

感谢您的时间。

回答

8

(代码更新的斯威夫特3,雨燕2.0版本,可以发现在编辑历史 。)

这是我从翻译答案Change OS X system volume programmaticallySetting Mac OSX Volume Programatically using XCode斯威夫特得到(检查省略错误为了简洁):

所需的框架:

import AudioToolbox 

获取默认的输出设备:

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

var getDefaultOutputDevicePropertyAddress = AudioObjectPropertyAddress(
    mSelector: AudioObjectPropertySelector(kAudioHardwarePropertyDefaultOutputDevice), 
    mScope: AudioObjectPropertyScope(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: AudioObjectPropertySelector(kAudioHardwareServiceDeviceProperty_VirtualMasterVolume), 
    mScope: AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput), 
    mElement: AudioObjectPropertyElement(kAudioObjectPropertyElementMaster)) 

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

它比相应的C代码更详细一点,因为许多参数 需要在夫特显式转换为参数类型。

积分为Set OS X volume in OS X 10.11 using Swift without using the deprecated AudioHardwareServiceSetPropertyData API使用AudioObjectSetPropertyData() 而不是已弃用AudioHardwareServiceSetPropertyData()

+0

很酷。非常感谢。现在我看到我用AudioDeviceId和kAudio所做的错误.... – 2014-12-04 10:49:21

相关问题