2016-11-12 12 views
3

Так как способ для создания экземпляра AVAudioUnit это:Как я могу подклассы AVAudioUnit?

[AVAudioUnit instantiateWithComponentDescription:componentDescription options:0 completionHandler:^(__kindof AVAudioUnit * _Nullable audioUnit, NSError * _Nullable error) { 
    }]; 

Как я должен подкласс AVAudioUnit? Я попытался это:

[MySubclassOfAVAudioUnit instantiateWithComponentDescription:componentDescription options:0 completionHandler:^(__kindof AVAudioUnit * _Nullable audioUnit, NSError * _Nullable error) { 
    }]; 

Но audioUnit, который возвращается в блок еще типа AVAudioUnit и НЕ MySubclassOfAVAudioUnit.


ответ Per ритмической Fistman, я имею в регистрации мой пользовательский AUAudioUnit подкласс с примером кода Apple:

componentDescription.componentType = kAudioUnitType_Effect; 
componentDescription.componentSubType = 0x666c7472; /*'fltr'*/ 
componentDescription.componentManufacturer = 0x44656d6f; /*'Demo'*/ 
componentDescription.componentFlags = 0; 
componentDescription.componentFlagsMask = 0; 

Я хочу, чтобы мой AVAudioUnit подкласс всегда использовать мой AUAudioUnit.

+0

Я понял, что мой ответ был неправильным, вы можете использовать только подкласс 'AUAudioUnit' и закрепить его в подходящем подклассе' AVAudioUnit'. См. Мой обновленный ответ. –

ответ

3

От instantiateWithComponentDescription:completionHandler:

Возвращаемый экземпляр AVAudioUnit обычно будет подкласса (AVAudioUnitEffect, AVAudioUnitGenerator, AVAudioUnitMIDIInstrument или AVAudioUnitTimeEffect), выбран в соответствии с типом компонента.

UPDATE Я получил это неправильно - вы не можете экземпляр собственного AVAudioUnit подкласса, вы можете только создать экземпляр AUAudioUnit, завернутый в соответствующем встроенной AVFoundation AVAudioUnit подкласса (например, AVAudioUnitEffect, и т.д.) ,

Следующий код вызывает MyAUAudioUnit, подкласс AUAudioUnit быть обработан:

#import <AVFoundation/AVFoundation.h> 

@interface MyAUAudioUnit : AUAudioUnit { 

} 
@end 

@implementation MyAUAudioUnit 
    // implement it here 
@end 

// later 
- (void)instantiateMyAUAudioUnitWrappedInAVAudioUnit { 
    // register it (need only be done once) 
    AudioComponentDescription desc; 
    desc.componentType = kAudioUnitType_Effect; 
    desc.componentSubType = 0x666c7472; /*'fltr'*/ 
    desc.componentManufacturer = 0x44656d6f; /*'Demo'*/ 
    desc.componentFlags = 0; 
    desc.componentFlagsMask = 0; 

    [AUAudioUnit registerSubclass:MyAUAudioUnit.class asComponentDescription:desc name:@"MyAU" version:1]; 

    // Instantiate as many times as you like: 
    [AVAudioUnit instantiateWithComponentDescription:desc options:0 completionHandler:^(AVAudioUnit * audioUnit, NSError *error) { 
     NSLog(@"AVAudioUnit: %@, error: %@", audioUnit, error); 
    }]; 
} 

НЕПРАВИЛЬНО BIT

Так, чтобы ваш AVAudioUnit подкласс экземпляр, вы должны сначала зарегистрировать его с AUAudioUnit метод:

+[AUAudioUnit registerSubclass:asComponentDescription:name:version:]

Существует фрагмент кода и некоторые возможные ошибки в this devforum thread.

+0

Спасибо за быстрый ответ. Я выполнил именно эту процедуру, но instantiateWithComponentDescription никогда не вернет экземпляр моего подкласса. К сожалению, поток обсуждения, похоже, не затрагивает эту проблему. Я добавлю немного больше подробностей к вопросу. – user1021430

+0

Вы можете показать, как вы называете 'registerSubclass'? возможно, покажите некоторые из ваших подклассов 'AUAudioUnit'? –

+0

Просто любопытно узнать, понял ли это ОП. У меня такая же проблема. – GWRodriguez

 Смежные вопросы

  • Нет связанных вопросов^_^