(代码更新的斯威夫特3,雨燕2.0版本,可以发现在编辑历史 。)
这是我从翻译答案Change OS X system volume programmatically和Setting 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()
。
很酷。非常感谢。现在我看到我用AudioDeviceId和kAudio所做的错误.... – 2014-12-04 10:49:21