【问题标题】:How to call an Objective-C method from a AudioUnits C function? (iOS)如何从 AudioUnits C 函数调用 Objective-C 方法? (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 的交互来改变声音。)

标签: ios audio core-audio


【解决方案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
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2016-09-16
    • 2023-03-29
    • 2013-12-23
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多