мои навыки C++ довольно легкие, но мне удается делать вещи - пока я не упираюсь в стену. Текущая стена:
Я использую CoreAudio, чтобы делать некоторые вещи с воспроизведением Midi. У меня много работы, но я застрял на простой вещи. (Я не знаю правильную терминологию С++, так что терпите меня...).
Я использую функцию обратного вызова рендеринга в CoreAudio, чтобы указать, когда событие миди-ноты визуализируется AU. Если я определяю ее как неклассовую функцию и вставляю main.cpp (или testApp.cpp, если уж на то пошло), она работает — я получаю события. Проблема в том, что мне нужно, чтобы экземпляр testApp получал эти события.
Итак... есть ли способ получить экземпляр testApp из main.cpp, чтобы я мог вызвать нужный мне метод testApp?
ИЛИ есть ли какое-то вуду С++, чтобы иметь неклассовую функцию, находящуюся внутри класса, вызывающую метод экземпляра? Например, если функция ниже находится в моем классе, как она может вызвать метод для экземпляра класса...
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*, константа AudioTimeStamp*, UInt32, UInt32, AudioBufferList*)