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


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


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


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


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


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


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


+(AudioDeviceID)defaultOutputDeviceID
{
    AudioDeviceID   outputDeviceID = kAudioObjectUnknown;
    
    // get output device device
    UInt32 propertySize = 0;
    OSStatus status = noErr;
    AudioObjectPropertyAddress propertyAOPA;
    propertyAOPA.mScope = kAudioObjectPropertyScopeGlobal;
    propertyAOPA.mElement = kAudioObjectPropertyElementMaster;
    propertyAOPA.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
    
    if (!AudioHardwareServiceHasProperty(kAudioObjectSystemObject, &propertyAOPA))
    {
        NSLog(@"Cannot find default output device!");
        return outputDeviceID;
    }
    
    propertySize = sizeof(AudioDeviceID);
    
    status = AudioHardwareServiceGetPropertyData(kAudioObjectSystemObject, &propertyAOPA, 0, NULL, &propertySize, &outputDeviceID);
    
    if(status) 
    {
        NSLog(@"Cannot find default output device!");
    }
    return outputDeviceID;
}

// getting system volume

+(float)volume :(int) flag : (float) volume_value
{
    Float32         outputVolume;
    
    UInt32 propertySize = 0;
    OSStatus status = noErr;
    AudioObjectPropertyAddress propertyAOPA;
    propertyAOPA.mElement = kAudioObjectPropertyElementMaster;
    propertyAOPA.mSelector = kAudioHardwareServiceDeviceProperty_VirtualMasterVolume;
    propertyAOPA.mScope = kAudioDevicePropertyScopeOutput;
    
    AudioDeviceID outputDeviceID = [[self class] defaultOutputDeviceID];
    
    if (outputDeviceID == kAudioObjectUnknown)
    {
        NSLog(@"Unknown device");
        return 0.0;
    }
    
    if (!AudioHardwareServiceHasProperty(outputDeviceID, &propertyAOPA))
    {
        NSLog(@"No volume returned for device 0x%0x", outputDeviceID);
        return 0.0;
    }
    
    propertySize = sizeof(Float32);
    
    status = AudioHardwareServiceGetPropertyData(outputDeviceID, &propertyAOPA, 0, NULL, &propertySize, &outputVolume);
    
    if (status)
    {
        NSLog(@"No volume returned for device 0x%0x", outputDeviceID);
        return 0.0;
    }
    
    if (outputVolume < 0.0 || outputVolume > 1.0) return 0.0;
    
    if (flag == 0) {
        return outputVolume;
    }else if (flag == 1){
        propertySize = (sizeof(volume_value));
        AudioHardwareServiceSetPropertyData(outputDeviceID, &propertyAOPA, 0, NULL, propertySize, &volume_value);
    }
    return 0;
}

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


간단히 설명 드리자면..

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

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


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


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


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


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