0

使用 AudioUnit 和 kAudioUnitSubType_HALOutput 如何检测输出是扬声器还是耳机?

4

1 回答 1

2
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;
}
于 2013-03-31T11:30:09.400 回答