我静音,然后使用以下代码取消静音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
时,没有声音播放,并且系统是未静音的。