Attention! Translated article might be found on my English blog.

2016年4月10日日曜日

deprecatedなAudioHardwareGetProperty()の代替AudioObjectGetPropertyData()

AudioHardwareGetProperty()の代わりにAudioObjectGetPropertyData()を使う。
その際、第1引数にはkAudioObjectSystemObjectを指定する。
また、hardware propertyはAudioObjectPropertyAddress構造体のmSelectorメンバにセットする。

下記はデフォルト入力デバイスを取得するコードです。

変更前
err = AudioHardwareGetPropertykAudioHardwarePropertyDefaultInputDevice,
&size,

&deviceID );

変更後

    AudioObjectPropertyAddress  addr;
    UInt32 size = sizeof(AudioDeviceID);
    
    addr.mSelector = kAudioHardwarePropertyDefaultInputDevice;
    addr.mScope = kAudioObjectPropertyScopeGlobal;
    addr.mElement = kAudioObjectPropertyElementMaster;
    
    OSStatus err;
    err = AudioObjectGetPropertyData(kAudioObjectSystemObject,
                                     &addr,
                                     0,
                                     NULL,
                                     &size,
                                     outDeviceIDPtr);