可以静音系统卷导致coreadiuod使用大量的CPU吗?

时间:2011-03-30 12:13:28

标签: cocoa macos core-audio

我静音,然后使用以下代码取消静音OS X系统卷:

void SetMute(AudioDeviceID device, BOOL mute)
{
    UInt32 muteVal = (UInt32)mute;

    AudioObjectPropertyAddress address = {
        kAudioDevicePropertyMute,
        kAudioDevicePropertyScopeOutput,
        0
    };

    OSStatus err;
    err = AudioObjectSetPropertyData(device,
                                     &address,
                                     0,
                                     NULL,
                                     sizeof(UInt32),
                                     &muteVal);
    if (err)
    {
        NSString * message;
        /* big switch statement on err to set message */
        NSLog(@"error while %@muting: %@", (mute ? @"" : @"un"), message);
    }
}

device的值由

确定
AudioDeviceID GetDefaultAudioDevice()
{
    OSStatus err;
    AudioDeviceID device = 0;
    UInt32 size = sizeof(AudioDeviceID);
    AudioObjectPropertyAddress address = {
        kAudioHardwarePropertyDefaultOutputDevice,
        kAudioObjectPropertyScopeGlobal,
        kAudioObjectPropertyElementMaster
    };

    err = AudioObjectGetPropertyData(kAudioObjectSystemObject,
                                     &address,
                                     0,
                                     NULL,
                                     &size,
                                     &device);
    if (err)
    {
        NSLog(@"could not get default audio output device");
    }

    return device;
}

我还检查系统音量当前是否已静音,但是:

BOOL GetMute(AudioDeviceID device)
{
    UInt32 size = sizeof(UInt32);
    UInt32 muteVal;

    AudioObjectPropertyAddress address = {
        kAudioDevicePropertyMute,
        kAudioDevicePropertyScopeOutput,
        0
    };

    OSStatus err;
    err = AudioObjectGetPropertyData(device,
                                     &address,
                                     0,
                                     NULL,
                                     &size,
                                     &muteVal);
    if (err)
    {
        NSString * message;
        /* big switch to set message */
        NSLog(@"error while getting mute status: %@", message);
    }

    return (BOOL)muteVal;
}

所有这一切似乎都运行正常 - 系统静音和取消静音的行为与用户点击键盘上的静音键相同(取消静音,然后在静音之前恢复最后一个音量等)。

我注意到在我的程序执行此操作后的某个未指定的时间,coreaudiod开始消耗比正常情况多得多的CPU(在我的情况下,这只是5-7%左右,但通常报告为0.0活动监视器中的%)。据我所知,我正在那里正确使用Core Audio API,看起来没有什么应该导致coreaudiod中的任何故障,所以我希望有人可以指出我的问题代码,或指向我可能导致coreaudiod中的CPU使用的其他内容(可能不相关?)。我还应该注意到,当我使用比正常情况更多的CPU观察coreaudiod时,没有声音播放,并且系统是未静音的。

0 个答案:

没有答案