Технические вопросы и ответы QA1645

Отъезжайте AudioUnitRemovePropertyListener и Менеджер компонентов на Mac OS X 10.6 и больше

Q: Мое приложение все еще использует AudioUnitRemovePropertyListener и Менеджер компонентов при использовании Аудиоустройств. Для Mac OS X 10.6, во что APIs я должен переместиться?

A: Мое приложение все еще использует AudioUnitRemovePropertyListener и Менеджер компонентов при использовании Аудиоустройств. Для Mac OS X 10.6, во что APIs я должен переместиться?

Традиционно, Менеджер компонентов использовался для регистрации, открытия и упаковки Аудиоустройств. Однако это может не всегда иметь место и для обеспечения API, который будет поддерживаться на Mac OS X 10.6, iPhone 2.0 и большие операционные системы, приложения с помощью аудиоустройств должны переместить от старого Менеджера компонентов APIs к Аудио Компоненту APIs (расположенный в AudioUnitFramework/AudioComponent.h) найти и открыть аудиоустройства.

Когда приложение перемещает в использование Аудио Компонента API на Mac OS X 10.6, это больше не должно также вызывать AudioUnitRemovePropertyListener (осуждаемый в Mac OS X 10.5), поскольку это не поддерживается и перестанет работать.

Приложения должны заменить все вызовы к AudioUnitRemovePropertyListener с AudioUnitRemovePropertyListenerWithUserData. Это обновило пар API с AudioUnitAddPropertyListener разрешение приложений использовать то же AudioUnitPropertyListenerProc несколько раз.

При вызове AudioUnitRemovePropertyListenerWithUserData приложение должно обеспечить тот же указатель функции, и пользовательские данные обеспечили, когда слушатель был добавлен с AudioUnitAddPropertyListener.

От AudioUnitFramework/AUComponent.h Mac OS X 10,6 SDK.

/*!
    @function       AudioUnitAddPropertyListener
    @abstract       registration call to receive notifications for when a property changes
    @discussion     When an audio unit property value changes, a notification callback can be called by the
                    audio unit to  inform interested parties that this event has occurred. The notification is
                    defined by the tuple of inProc and inProcUserData as paired to the specified property ID,
                    so the previously defined AudioUnitRemovePropertyListener is dperecated because it didn't
                    allow for the provision of the inProcUserData to remove a given listener (so, you should
                    use AudioUnitRemovePropertyListenerWithUserData).

    @param          inUnit
                    the audio unit
    @param          inID
                    the proeprty identifier
    @param          inProc
                    the proceedure to call when the property changes (on any scope or element)
    @param          inProcUserData
                    the user data to provide with the callback

    @result         noErr, or various audio unit errors related to properties
*/
extern OSStatus
AudioUnitAddPropertyListener(AudioUnit                     inUnit,
                             AudioUnitPropertyID           inID,
                             AudioUnitPropertyListenerProc inProc,
                             void *                        inProcUserData)
                             __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_2_0);

/*!
    @function       AudioUnitRemovePropertyListenerWithUserData
    @abstract       remove a previously registered property listener
    @discussion     Removes a previously registered property listener as specified by the inProc and 
                    inProcUser data as paired to the property identifier

    @param          inUnit
                    the audio unit
    @param          inID
                    the proeprty identifier
    @param          inProc
                    the proceedure previously registered
    @param          inProcUserData
                    the user data paired with the provided inProc

    @result         noErr, or various audio unit errors related to properties
*/
extern OSStatus
AudioUnitRemovePropertyListenerWithUserData(AudioUnit                     inUnit,
                                            AudioUnitPropertyID           inID,
                                            AudioUnitPropertyListenerProc inProc,
                                            void *                        inProcUserData)
                                            __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);


История версии документа


ДатаПримечания
15.03.2010

Новый документ, напоминающий разработчикам отъезжать осуждаемый AudioUnitRemovePropertyListener API и использовать Аудио Компонент APIs при нахождении и открытии аудиоустройств.