gpt4 book ai didi

core-audio - 我如何子类化 AVAudioUnit?

转载 作者:行者123 更新时间:2023-12-01 01:56:00 25 4
gpt4 key购买 nike

自实例化一个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 .

根据 Rhythmic Fistman 的回复,我正在注册我的自定义 AUAudioUnit带有 Apple 示例代码的子类:
componentDescription.componentType = kAudioUnitType_Effect;
componentDescription.componentSubType = 0x666c7472; /*'fltr'*/
componentDescription.componentManufacturer = 0x44656d6f; /*'Demo'*/
componentDescription.componentFlags = 0;
componentDescription.componentFlagsMask = 0;

我要我的 AVAudioUnit子类总是使用我的 AUAudioUnit .

最佳答案

来自 instantiateWithComponentDescription:completionHandler:

The returned AVAudioUnit instance normally will be of a subclass (AVAudioUnitEffect, AVAudioUnitGenerator, AVAudioUnitMIDIInstrument, or AVAudioUnitTimeEffect), selected according to the component's type.



更新
我弄错了 - 你不能实例化你自己的 AVAudioUnit子类,你只能实例化你的 AUAudioUnit ,包裹在相关的内置AVFoundation AVAudioUnit子类(例如 AVAudioUnitEffect 等)。

以下代码导致 MyAUAudioUnitAUAudioUnit 的子类要实例化:
#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);
}];
}

错误位

所以要拥有您的 AVAudioUnit实例化的子类,您必须首先使用 AUAudioUnit 注册它方法:
+[AUAudioUnit registerSubclass:asComponentDescription:name:version:]
this devforum thread 中有一个代码片段和一些可能的问题.

关于core-audio - 我如何子类化 AVAudioUnit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com