2014-12-04 2 views
3

AudioToolbox에 대해 많이 읽었으며 obj-c의 일부 소스 예제를 읽습니다. 그러나 스위프트에서 작동시키지 못합니다.osx의 빠른 응용 프로그램에서 시스템 마스터 볼륨을 설정하는 방법

신속한 응용 프로그램에서 마스터 볼륨을 설정하는 방법을 누군가가 나에게 지적 할 수 있습니까?

이 예 : 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 버전은 편집 역사에 찾을 수 있습니다.)

이 내가 (오류가 생략 검사 스위프트에 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으로 변경하면 더 이상 사용되지 않는 AudioHardwareServiceSetPropertyData() 대신 AudioObjectSetPropertyData() 을 사용합니다.

+0

차가움. 고마워. 이제 AudioDeviceId와 kAudio로 만든 실수를 봅니다 .... –