我的 C++ 技能很轻,但我设法完成了工作——直到我碰壁。现在的墙:
我正在使用 CoreAudio 来做一些关于 Midi 播放的事情。我有很多工作,但被困在一个简单的事情上。(我不知道正确的 C++ 术语,所以请耐心等待......)。
我在 CoreAudio 中使用渲染回调函数来指示 AU 何时渲染 midi 音符事件。如果我将它定义为非类函数并将其粘贴到 main.cpp (或 testApp.cpp ),它就可以工作 - 我得到了事件。问题是我需要能够让 testApp 的实例获取这些事件。
所以..有没有办法从 main.cpp 获取 testApp 的实例,这样我就可以调用我需要的 testApp 方法?
或者是否有一些 C++ 巫术让一个非类函数驻留在类中调用实例的方法?例如,如果下面的函数在我的类中,它如何调用类的实例上的方法......
OSStatus renderCallback(void *inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData)
{
someClassMethod(); // doesn't work
this.someClassMethod(); // doesn't work
self.someClassMethod(); // doesn't work
}
我不确定,但我认为 CoreAudio 的东西不会将实例方法作为回调 - 至少这是我从错误消息(如下)中收集到的。无论如何,我很好地做到了。
感谢您的任何提示!
错误:OSStatus (testApp::)(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*)' 类型的参数不匹配 'OSStatus ( )(void , AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32 , 音频缓冲区列表*)