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

Аудиоустройства - Как определить версию Аудиоустройства

Q: Как я определяю версию Аудиоустройства, которое я использую?

A: Core Audio использует Аудио Компонент API для предоставления доступа к Аудиоустройствам доступными как ресурс в масштабе всей системы. После получения допустимого экземпляра Аудиоустройства можно использовать AudioComponentGetVersion получить номер версии.

Это может быть полезно, когда Вы требуете определенной версии Аудиоустройства с обновленными или различными функциями, и Вы хотите определить, какая версия установлена перед использованием Аудиоустройства.

Перечисление 1 демонстрирует, как гарантировать, чтобы у Вас было, по крайней мере, версия 2.0 3D установленного аудиоустройства Микшера.

Перечисление 1  , проверяющее 3D версию микшера.

// The Version format is 0xMMMMmmbb
// The digits M/m/b are stored in BCD (Binary Coded Decimal) format for numbers greater than 9
// A version number for 10.3.1 would be: 0x100301
// A version number for 2.3.1 would be: 0x20301
 
#define kPreferredMixerVersion  0x20400
#define kMinimumMixerVersion    0x20000
 
...
 
    // if the returned version is less than 0x20000
    // it's not the 3DMixer we're looking for, move along...
    UInt32 mixerVersion = kMinimumMixerVersion;
 
    if ( Is3DMixerVersionValid(&mixerVersion) ) {
        // yes, we can work with it
 
        // your code here...
        printf("Version Number Returned 0x%x", (unsigned int)mixerVersion);
    }
 
...
 
bool Is3DMixerVersionValid(UInt32 *ioVersionNumber)
{
    bool isVersionValid = false;
    UInt32 theVersionNumber = 0;
 
    if (NULL == ioVersionNumber) return false;
 
    AudioComponentDescription mixer3D_desc = { kAudioUnitType_Mixer,
                                               kAudioUnitSubType_3DMixer,
                                               kAudioUnitManufacturer_Apple,
                                               0, 0 };
 
 
    AudioComponent mixer3D_component = AudioComponentFindNext(0, &mixer3D_desc);
    if (NULL == mixer3D_component) return false;
 
    if (AudioComponentGetVersion(mixer3D_component, &theVersionNumber)) return false;
 
    if (theVersionNumber >= *ioVersionNumber){
        isVersionValid = true;
        *ioVersionNumber = theVersionNumber; // validated this pointer on entry
    }
 
    return isVersionValid;
}

Посмотрите AudioComponent.h для получения дополнительной информации.



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


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

Обновленный для использования Аудио Компонента API. Обновленное описание версии форматирует и добавленные примеры.

07.03.2005

Измененный код Is3DMixerVersionValid (). Добавленная информация о формате Версии (BCD).

03.02.2005

Новый документ, демонстрирующий, как найти номер версии Аудиоустройства.