gpt4 book ai didi

c++ - 使用 openFrameworks + CoreAudio

转载 作者:行者123 更新时间:2023-11-28 03:48:14 27 4
gpt4 key购买 nike

我的 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 不会将实例方法作为回调 - 至少这是我从错误消息(下方)中收集到的内容。无论如何,我都很好。

感谢任何提示!

error: argument of type OSStatus (testApp::)(void*, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*)' does not match 'OSStatus ()(void, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32, UInt32, AudioBufferList*)

最佳答案

您不需要为了执行此操作而弄乱静态实例。添加渲染回调时,将 C++ 对象作为 refcon 传递,然后将 refcon 转换为回调中的对象:

// The actual callback is defined as a static function
static OSStatus
myAURenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
MyClass *object = static_cast<MyClass *>(inRefCon);
return object->Render(ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData);
}


// When adding the render callback pass this as the context
AURenderCallbackStruct cbs = { myAURenderCallback, this };
OSStatus result = AUGraphSetNodeInputCallback(graph, node, 0, &cbs);


// The callback will look like
OSStatus MyClass::Render(AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
// Do something
}

关于c++ - 使用 openFrameworks + CoreAudio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687954/

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