在 Mac OS X 上使用 AudioUnit 检测扬声器/耳机
Posted
技术标签:
【中文标题】在 Mac OS X 上使用 AudioUnit 检测扬声器/耳机【英文标题】:Detect speaker/headset using AudioUnit on Mac OS X 【发布时间】:2013-03-31 10:34:20 【问题描述】:使用 AudioUnit 和 kAudioUnitSubType_HALOutput 如何检测输出是扬声器还是耳机?
【问题讨论】:
【参考方案1】:bool usingInternalSpeakers()
AudioDeviceID defaultDevice = 0;
UInt32 defaultSize = sizeof(AudioDeviceID);
const AudioObjectPropertyAddress defaultAddr =
kAudioHardwarePropertyDefaultOutputDevice,
kAudioObjectPropertyScopeGlobal,
kAudioObjectPropertyElementMaster
;
AudioObjectGetPropertyData(kAudioObjectSystemObject, &defaultAddr, 0, NULL, &defaultSize, &defaultDevice);
AudioObjectPropertyAddress property;
property.mSelector = kAudioDevicePropertyDataSource;
property.mScope = kAudioDevicePropertyScopeOutput;
property.mElement = kAudioObjectPropertyElementMaster;
UInt32 data;
UInt32 size = sizeof(UInt32);
AudioObjectGetPropertyData(defaultDevice, &property, 0, NULL, &size, &data);
return data == 'ispk';
int main(int argc, const char * argv[])
if (usingInternalSpeakers())
printf("I'm using the speakers!");
else
printf("i'm using the headphones!");
return 0;
【讨论】:
有什么方法可以通知变更吗?例如我们可以在 ios 中监听 AVAudioSessionRouteChangeNotification。以上是关于在 Mac OS X 上使用 AudioUnit 检测扬声器/耳机的主要内容,如果未能解决你的问题,请参考以下文章