在 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 检测扬声器/耳机的主要内容,如果未能解决你的问题,请参考以下文章

OS X AudioUnit:在生成器上设置杂项属性时出现 kAudio_ParamError

如何在Mac OS X上安装 Ruby运行环境

如何在 OS X 上使用 LaTeX

ruby 在Mac OS X上使用latexmk

在 Mac OS X 上检索系统信息 [关闭]

如何在Mac OS X上安装 Ruby运行环境