如何从 AudioUnits C 函数调用 Objective-C 方法? (iOS)
Posted
技术标签:
【中文标题】如何从 AudioUnits C 函数调用 Objective-C 方法? (iOS)【英文标题】:How to call an Objective-C method from a AudioUnits C function? (iOS) 【发布时间】:2013-04-24 17:36:56 【问题描述】:我发现了一个很棒的关于 AudioUnits (http://www.cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html) 的教程,我已经开始在我的系统上工作了;但是,我无法从 RenderTone C 函数调用我的 Objective-C 方法。
在与RenderTone相同的m文件中,我有如下方法:
- (Float32)signalGenerator:(int)sample withSampleRate:(int)Fs andFrequency:(float)frequency
当我尝试从 RenderTone 函数调用此方法时,XCode 给我以下错误:“使用未声明的标识符 'signalGenerator'。”如果它在同一个文件中,为什么它看不到这个方法?
感谢阅读。
【问题讨论】:
Apple 建议不要在音频单元回调中发送 Objective C 消息。最好坚持使用普通的 C 函数调用。 @hotpaw2 好的,谢谢,很高兴知道。 (我希望根据用户与 UI 的交互来改变声音。) 【参考方案1】:在RenderTone()
函数中,
ToneGeneratorViewController *viewController = (ToneGeneratorViewController *)inRefCon;
是你的视图控制器的实例,所以你可以调用你的方法
Float32 x = [viewController signalGenerator:13 withSampleRate:14 andFrequency:15];
来自RenderTone()
。为了让编译器知道该方法,
你也可以
RenderTone()
移动到@implementation ToneGeneratorViewController
块内,或者
使用类扩展添加函数原型:
@interface ToneGeneratorViewController ()
- (Float32)signalGenerator:(int)sample withSampleRate:(int)Fs andFrequency:(float)frequency;
@end
【讨论】:
以上是关于如何从 AudioUnits C 函数调用 Objective-C 方法? (iOS)的主要内容,如果未能解决你的问题,请参考以下文章