如何检测CoreAudio中何时断开音频设备?

bha*_*ley 5 macos device core-audio

有没有办法为任何音频设备设置一个侦听器来检测它是否被删除或拔掉?我发现这篇文章有助于你只关心内置的音频相关设备:

如何在耳机插入/拔出时收到通知?苹果电脑

但我正在寻找更通用的解决方案(即所有设备,USB,HDMI等).它是OSX特有的.

关于如何做到这一点的任何想法?

bha*_*ley 6

我想到了!只需要将一个监听器添加到相应的AudioDeviceID(您要监控的设备):

// add listener for detecting when a device is removed
const AudioObjectPropertyAddress alive_address =
{
  kAudioDevicePropertyDeviceIsAlive,
  kAudioObjectPropertyScopeGlobal,
  kAudioObjectPropertyElementMaster
};

AudioObjectAddPropertyListener(current_device_id_, &alive_address, deviceIsAliveCallback, &player_);
Run Code Online (Sandbox Code Playgroud)

然后写相应的回调:

OSStatus deviceIsAliveCallback(AudioObjectID                       inObjectID,
                           UInt32                              inNumberAddresses,
                           const AudioObjectPropertyAddress    inAddresses[],
                           void*                               inClientData)
{
  // your code here
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人!