(код обновлен для Swift 3, версия Swift 2 можно найти в истории редактирования .)
Это то, что я получил от перевода ответов на Change OS X system volume programmatically и Setting Mac OSX Volume Programatically using XCode в Swift (проверка ошибок опущена для краткости):
Требуемые рамки:
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)
объем Set:
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, потому что многие аргументы нужно быть преобразован в тип параметра явно Swift.
Кредиты до Set OS X volume in OS X 10.11 using Swift without using the deprecated AudioHardwareServiceSetPropertyData API за использование AudioObjectSetPropertyData()
вместо устаревших AudioHardwareServiceSetPropertyData()
.
прохладный. большое спасибо. Теперь я вижу свои ошибки, которые я сделал с AudioDeviceId и kAudio .... –