objective-c - 如何在Cocoa中关闭蓝牙设备和声音设备?

标签 objective-c cocoa macos bluetooth iobluetooth

我知道Airport可以被CoreWLAN框架关闭。

所以,我认为可能存在与蓝牙设备和声音设备相关的功能或框架。

如何关闭该设备?

最佳答案

我假设您所说的“无法获得电源使其无法说话”,您的意思是您只是想将扬声器静音。我在这里找到了一些简洁的示例代码,使用 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] [william@enterprise ~/Documents/Programming/c]$ gcc -framework CoreAudio -o mute.o coreaudio.c 
.. snipped compiler output..
[04:29:26] [william@enterprise ~/Documents/Programming/c]$ ./mute.o 
The system's volume is currently 0.436749
Setting volume to 0.

希望这能让您朝着正确的方向前进。

关于objective-c - 如何在Cocoa中关闭蓝牙设备和声音设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5163878/

相关文章:

node.js - 在 MacOS X 上安装 Node.js、nvm 和 npm 的推荐方法是什么?

objective-c - 如何在触摸按钮时更改 UIButton 图像

objective-c - 在 ios 字符串中保持正斜杠

ios - UIDatePicker 最小/最大日期

iphone - 如何将纯色应用于 UISearchBar

iphone - 为什么 NSManagedObject 和 NSEntityDescription 是单独的类?

objective-c - 无法在运行时在工作表中编辑 NSTextField

cocoa - 将 NSScrollView 添加到 IKImageBrowserView 中以实现滚动

swift - 如何读取屏幕EDID数据?

git - brew doctor 警告 : How to add git to PATH?