Свойства аудиоустройства и базовые типы данных основы
Q: При работе со свойствами Audio Unit, берущими и возвращающими Базовые Типы данных Основы, кто ответственен за сохранение или выпуск.
A: При работе со свойствами Audio Unit, берущими и возвращающими Базовые Типы данных Основы, кто ответственен за сохранение или выпуск.
Каждый раз, когда узел Аудиоустройства работает со свойствами Audio Unit, которые являются Базовыми Типами данных Основы, вызывающая сторона почти всегда владеет ссылкой и поэтому ответственна за выпуск его как требуется.
Сводка для AudioUnitSetProperty
kAudioUnitProperty_ClassInfo- Берет aCFDictionaryRefдопустимый на глобальной области видимости.kAudioUnitProperty_ElementName- Берет aCFStringRefдопустимый на любом объеме.kAudioUnitProperty_PresentPreset- БеретAUPresetструктура, допустимая на глобальной области видимости.presetNameaCFStringRefсодержа предварительно установленное имя, принадлежавшее вызывающей стороне после получения этого свойства.
Сводка для AudioUnitGetProperty
Все Базовые объекты Основы, возвращенные AudioUnitGetProperty следуйте за Базовой семантикой Копии Основы, и поэтому принадлежат вызывающей стороне. Это - ответственность за вызывающие стороны оставить владение (использование CFRelease) когда сделано с возвращенным значением.
Следующие свойства возвращают Базовые объекты Основы:
kAudioUnitProperty_ClassInfo- Возвраты aCFDictionaryRef.kAudioUnitProperty_ParameterValueStrings- Возвраты aCFArrayRef.kAudioUnitProperty_FactoryPresets- Возвраты aCFArrayRef.kAudioUnitProperty_ElementName- Возвраты aCFStringRef.kAudioUnitOfflineProperty_PreflightName- Возвраты aCFStringRef.kMusicDeviceProperty_BankName- Возвраты aCFStringRef.
Следующие свойства возвращают Базовые объекты Основы, встроенные как поля в структуры C:
kAudioUnitProperty_PresentPreset- ВозвратыAUPreset, гдеpresetNameaCFStringRefсодержа предварительно установленное имя.kAudioUnitProperty_ParameterStringFromValue- Возвраты aAudioUnitParameterStringFromValueструктура, гдеoutStringaCFStringRef(может бытьNULL).kAudioUnitProperty_ParameterIDName- Возвраты aAudioUnitParameterNameInfoструктура, гдеoutNameaCFStringRef.kAudioUnitProperty_ParameterClumpName- Возвраты aAudioUnitParameterNameInfoструктура, гдеoutNameaCFStringRef.kAudioUnitProperty_CocoaUI- Возвраты aAudioUnitCocoaViewInfoструктура, гдеCFStringRefимя (ена) класса возвращается вmCocoaAUViewClassполе.
Число имен классов в mCocoaAUViewClass поле может быть найдено при помощи следующего кода. dataSize максимальный размер свойства, возвращенного путем вызова AudioUnitGetPropertyInfo для kAudioUnitProperty_CocoaUI свойство.
UInt32 numberOfClasses = (dataSize - sizeof(CFURLRef)) / sizeof(CFStringRef); |
Обработка названий параметра
Владение основывается kAudioUnitParameterFlag_CFNameRelease флаг. Этот флаг обычно всегда устанавливается.
kAudioUnitProperty_ParameterInfo- Возвраты aAudioUnitParameterInfoструктура. Только выпускunitNameиcfNameStringCFStringRefsеслиkAudioUnitParameterFlag_CFNameReleaseфлаг установлен. См. Перечисление 1.
Узел Аудиоустройства должен проверить на этот флаг и, если установлено, должен выпустить название параметра аудиоустройства, когда это сделано с помощью него. Если этот флаг не установлен, Узел может предположить, что Аудиоустройство выпустит свои названия параметра.
Перечисление 1 , Иллюстрирующее использование kAudioUnitParameterFlag_CFNameRelease.
AudioUnitParameterInfo auinfo;
UInt32 propertySize = sizeof(AudioUnitParameterInfo);
OSStatus err = AudioUnitGetProperty(mAudioUnit,
kAudioUnitProperty_ParameterInfo,
mScope,
mParameterID,
&auinfo,
&propertySize);
if (err) { // handle error };
...
if (auinfo.flags & kAudioUnitParameterFlag_CFNameRelease) {
if (auinfo.flags & kAudioUnitParameterFlag_HasCFNameString && auinfo.cfNameString != NULL)
CFRelease(auinfo.cfNameString);
if (auinfo.unit == kAudioUnitParameterUnit_CustomUnit && auinfo.unitName != NULL)
CFRelease(auinfo.unitName);
} |
История версии документа
| Дата | Примечания |
|---|---|
| 03.03.2010 | Новый документ, описывающий владение типов данных CF когда свойства Getting/Setting AU. |