私の 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 」と一致しません、AudioBufferList*)