MAC OS X 에서 응용프로그램 개발시 MAC의 마스터 볼륨을 컨트롤 해주는 소스입니다.


일단 맥PC 에선 테스트는 못해봤구요.


맥북에서만 해봤는데, 흔히 'command' + 'F11' or 'F12' 키로 볼륨을 조절 하잔아요.


내 이때 볼륨의 값과 그 볼륨값을 설정할때 사용하는 코드 입니다.


따로 응용프로그램을 개발중이셨다면 .h 파일과 .m 파일을 만들어서 아래 소스를 붙여 놓구 다른 클래스에서 필요하실때마다


끌어다 쓰시면 될꺼 같아요.


일단 소스는 아래 와 같습니다.


01.+(AudioDeviceID)defaultOutputDeviceID
02.{
03.    AudioDeviceID   outputDeviceID = kAudioObjectUnknown;
04.     
05.    // get output device device
06.    UInt32 propertySize = 0;
07.    OSStatus status = noErr;
08.    AudioObjectPropertyAddress propertyAOPA;
09.    propertyAOPA.mScope = kAudioObjectPropertyScopeGlobal;
10.    propertyAOPA.mElement = kAudioObjectPropertyElementMaster;
11.    propertyAOPA.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
12.     
13.    if (!AudioHardwareServiceHasProperty(kAudioObjectSystemObject, &propertyAOPA))
14.    {
15.        NSLog(@"Cannot find default output device!");
16.        return outputDeviceID;
17.    }
18.     
19.    propertySize = sizeof(AudioDeviceID);
20.     
21.    status = AudioHardwareServiceGetPropertyData(kAudioObjectSystemObject, &propertyAOPA, 0, NULL, &propertySize, &outputDeviceID);
22.     
23.    if(status)
24.    {
25.        NSLog(@"Cannot find default output device!");
26.    }
27.    return outputDeviceID;
28.}
29. 
30.// getting system volume
31. 
32.+(float)volume :(int) flag : (float) volume_value
33.{
34.    Float32         outputVolume;
35.     
36.    UInt32 propertySize = 0;
37.    OSStatus status = noErr;
38.    AudioObjectPropertyAddress propertyAOPA;
39.    propertyAOPA.mElement = kAudioObjectPropertyElementMaster;
40.    propertyAOPA.mSelector = kAudioHardwareServiceDeviceProperty_VirtualMasterVolume;
41.    propertyAOPA.mScope = kAudioDevicePropertyScopeOutput;
42.     
43.    AudioDeviceID outputDeviceID = [[self class] defaultOutputDeviceID];
44.     
45.    if (outputDeviceID == kAudioObjectUnknown)
46.    {
47.        NSLog(@"Unknown device");
48.        return 0.0;
49.    }
50.     
51.    if (!AudioHardwareServiceHasProperty(outputDeviceID, &propertyAOPA))
52.    {
53.        NSLog(@"No volume returned for device 0x%0x", outputDeviceID);
54.        return 0.0;
55.    }
56.     
57.    propertySize = sizeof(Float32);
58.     
59.    status = AudioHardwareServiceGetPropertyData(outputDeviceID, &propertyAOPA, 0, NULL, &propertySize, &outputVolume);
60.     
61.    if (status)
62.    {
63.        NSLog(@"No volume returned for device 0x%0x", outputDeviceID);
64.        return 0.0;
65.    }
66.     
67.    if (outputVolume < 0.0 || outputVolume > 1.0) return 0.0;
68.     
69.    if (flag == 0) {
70.        return outputVolume;
71.    }else if (flag == 1){
72.        propertySize = (sizeof(volume_value));
73.        AudioHardwareServiceSetPropertyData(outputDeviceID, &propertyAOPA, 0, NULL, propertySize, &volume_value);
74.    }
75.    return 0;
76.}

내 여기서 뭐 다들 Object-C 하신분이라면 이정도 소스만 있으면 대충 어떻게 돌아가는건지 파악하시고 끌어다 쓰실거라 생각됩니다.


간단히 설명 드리자면..

1.+(float)volume :(int) flag : (float) volume_value

저같은 경우는 위 volume 를 끌어올때 플래그값과 현재 제가 지정할 볼륨값을 보내서 설정하게 해뒀는데요.


flag값이 0이면 현재 맥의 마스터볼륨 값을 가져오도록 하구요. 그럼 당연히 뒤에 volume_value 는 아무 값이나 넣구요.


만약 flag 값이 1이면 현재 맥의 마스터 볼륨을 제가 임의로 volume_value 를 줘서 마스터 볼륨을 설정하도록 한거 입니다.


다들 개인의 입맛에 따라 수정가능할꺼에요.


좋은 정보가 되었으면 좋겠네요 ^^