2011-03-02 2 views
2

나는 CoreWLAN 프레임 워크로 공항을 끌 수 있다는 것을 알고 있습니다.코코아에서 블루투스 장치 및 사운드 장치를 끄는 방법?

그래서 아마도 블루투스 장치 및 사운드 장치와 관련된 기능이나 프레임 워크가 있다고 생각합니다.

어떻게 장치를 끌 수 있습니까?

+1

사운드 장치를 "끄기"란 무엇을 의미합니까? 블루투스의 경우 blueutil의 소스 코드를 확인하십시오. http://www.frederikseiffert.de/blueutil/ –

+0

소리가 나는 장치에 전원이 공급되지 않아 말을 할 수 없다는 말입니다. 귀하의 링크에 감사드립니다. –

답변

0

나는 "말을 할 수 없어서 힘을 얻을 수 없다"고 가정합니다. 단순히 스피커를 음소거하기를 원할뿐입니다. CoreAudio를 사용하여 시스템의 기본 스피커를 음소거하는 몇 가지 샘플 코드를 찾았습니다. http://cocoadev.com/index.pl?SoundVolume

저는 이것을 순수 C로 변환하여 시도해 보았습니다.

#import <CoreAudio/CoreAudio.h> 
#import <stdio.h> 

// getting system volume 

float getVolume() { 
    float   b_vol; 
    OSStatus  err; 
    AudioDeviceID device; 
    UInt32   size; 
    UInt32   channels[2]; 
    float   volume[2]; 

    // get device 
    size = sizeof device; 
    err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device); 
    if(err!=noErr) { 
     printf("audio-volume error get device\n"); 
     return 0.0; 
    } 

    // try set master volume (channel 0) 
    size = sizeof b_vol; 
    err = AudioDeviceGetProperty(device, 0, 0, kAudioDevicePropertyVolumeScalar, &size, &b_vol); //kAudioDevicePropertyVolumeScalarToDecibels 
    if(noErr==err) return b_vol; 

    // otherwise, try seperate channels 
    // get channel numbers 
    size = sizeof(channels); 
    err = AudioDeviceGetProperty(device, 0, 0,kAudioDevicePropertyPreferredChannelsForStereo, &size,&channels); 
    if(err!=noErr) printf("error getting channel-numbers\n"); 

     size = sizeof(float); 
     err = AudioDeviceGetProperty(device, channels[0], 0, kAudioDevicePropertyVolumeScalar, &size, &volume[0]); 
     if(noErr!=err) printf("error getting volume of channel %d\n",channels[0]); 
      err = AudioDeviceGetProperty(device, channels[1], 0, kAudioDevicePropertyVolumeScalar, &size, &volume[1]); 
      if(noErr!=err) printf("error getting volume of channel %d\n",channels[1]); 

       b_vol = (volume[0]+volume[1])/2.00; 

       return b_vol; 
} 


// setting system volume 
void setVolume(float involume) { 
    OSStatus  err; 
    AudioDeviceID  device; 
    UInt32   size; 
    Boolean   canset = false; 
    UInt32   channels[2]; 
    //float   volume[2]; 

    // get default device 
    size = sizeof device; 
    err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device); 
    if(err!=noErr) { 
     printf("audio-volume error get device\n"); 
     return; 
    } 


    // try set master-channel (0) volume 
    size = sizeof canset; 
    err = AudioDeviceGetPropertyInfo(device, 0, false, kAudioDevicePropertyVolumeScalar, &size, &canset); 
    if(err==noErr && canset==true) { 
     size = sizeof involume; 
     err = AudioDeviceSetProperty(device, NULL, 0, false, kAudioDevicePropertyVolumeScalar, size, &involume); 
     return; 
    } 

    // else, try seperate channes 
    // get channels 
    size = sizeof(channels); 
    err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size,&channels); 
    if(err!=noErr) { 
     printf("error getting channel-numbers\n"); 
     return; 
    } 

    // set volume 
    size = sizeof(float); 
    err = AudioDeviceSetProperty(device, 0, channels[0], false, kAudioDevicePropertyVolumeScalar, size, &involume); 
    if(noErr!=err) printf("error setting volume of channel %d\n",channels[0]); 
     err = AudioDeviceSetProperty(device, 0, channels[1], false, kAudioDevicePropertyVolumeScalar, size, &involume); 
     if(noErr!=err) printf("error setting volume of channel %d\n",channels[1]); 

} 




int main() { 
    printf("The system's volume is currently %f\n", getVolume()); 
    printf("Setting volume to 0.\n"); 
    setVolume(0.0f); 
    return 0; 
} 

나는 그것을 실행하고이 가지고 :

[04:29:03] [[email protected] ~/Documents/Programming/c]$ gcc -framework CoreAudio -o mute.o coreaudio.c 
.. snipped compiler output.. 
[04:29:26] [[email protected] ~/Documents/Programming/c]$ ./mute.o 
The system's volume is currently 0.436749 
Setting volume to 0. 

는 희망이 옳은 방향으로 당신을 보냅니다.

관련 문제