auval - Недопустимый Селектор Для Ошибки Типа AU на Mac OS X 10.7
Q: При тестировании наших Аудиоустройств на Mac OS X 10.7, мы видим auval ошибки, не присутствовавшие на предыдущей версии Mac OS X. Например, мы теперь добираемся ERROR: MusicDeviceSendMIDI should be invalid selector for AU type - noErr was returned. Что это означает?
A: Существует несколько вещей, подразумеваемых возвращенным сообщением об ошибке:
Недопустимое селекторное сообщение
auval сам тест утвержден на двух вещах:
Аудиоустройство типа
kAudioUnitType_Effect('aufx') НЕ поддерживает селекторы MIDI.Если Аудиоустройство типа
kAudioUnitType_Effect('aufx') действительно поддерживает селекторы MIDI (который является неправильным согласно Спецификации Аудиоустройства), нет никакого способа определить, реализует ли Аудиоустройство фактически селекторы или нет.
Поэтому разъяснить эту неоднозначность с точки зрения узла Аудиоустройства, auval теперь выполнит этот тест и приведет Аудиоустройство к сбою, он распространяет эту неоднозначность.
Сообщение noErr
Когда auval возвращает a noErr от Аудиоустройства в этом случае, модуль должен поддерживать kMusicDeviceMIDIEventSelect селектор где-нибудь в функции Отгрузки Компонента.
Если Аудиоустройство является подклассом AUBase или AUEffectBase тогда по умолчанию это не имело бы поддержки селекторов MIDI. Если это - подкласс AUMIDIBase однако, тогда точка входа переопределяется и может быть найдена в AUMIDIBase.cpp:
Перечисление 1
ComponentResult AUMIDIBase::ComponentEntryDispatch(ComponentParameters *params, AUMIDIBase *This)
{
if (This == NULL) return paramErr;
ComponentResult result;
switch (params->what) {
case kMusicDeviceMIDIEventSelect:
{
PARAM(UInt32, pbinStatus, 0, 4);
PARAM(UInt32, pbinData1, 1, 4);
PARAM(UInt32, pbinData2, 2, 4);
PARAM(UInt32, pbinOffsetSampleFrame, 3, 4);
result = This->MIDIEvent(pbinStatus, pbinData1, pbinData2, pbinOffsetSampleFrame);
}
break;
case kMusicDeviceSysExSelect:
{
PARAM(const UInt8 *, pbinData, 0, 2);
PARAM(UInt32, pbinLength, 1, 2);
result = This->SysEx(pbinData, pbinLength);
}
break;
default:
result = badComponentSelector;
break;
}
return result;
} |
Поиск kMusicDeviceMIDIEventSelect и kMusicDeviceSysExSelect поскольку код отгрузки должен принимать их как допустимые селекторы.
История версии документа
| Дата | Примечания |
|---|---|
| 13.04.2011 | Новый документ, описывающий новую ошибку auval, может возвратить Mac OS X 10.7, когда не была ранее возвращена никакая ошибка. |