Jack にコールバック関数を設定しようとしています。これは通常、関数「jack_set_process_callback」を使用して非常に簡単です (「プロセス」コールバックを設定する場合)。
API での定義は次のとおりです。
int jack_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg).
サンプル コード (C コンポーネントを含む) では、以下のグローバル関数が宣言されています。
int process(jack_nframes_t nframes, void *arg){
// do something in the callback
return 0;
}
次に、次の行によって Jack プロセスのコールバックとして設定されます。
jack_set_process_callback(client, process, 0)
..これはコンパイルされ、完全に機能します。
私が今行っていることは、クラスベースのオーディオ プログラムを構築しようとしていることです。私はすべてのJackのものを想像上「Sound_Module」と呼ばれるクラスの中に入れています。
コールバックとして設定したい関数の定義は、このクラスのメンバー関数になりました。
int Sound_Module::process(jack_nframes_t nframes, void *arg){
// do something in the callback
return 0;
}
このメソッドをクラス コンストラクター内のコールバック関数として設定しようとしています。
(83) jack_set_process_callback(client, process, 0)
しかし、コンパイルすると、次のエラーが発生します。
sound_module.cpp:83: error: argument of type ‘int (Sound_Module::)(jack_nframes_t, void*)’ does not match ‘int (*)(jack_nframes_t, void*)’
このエラー メッセージから、コールバック関数を別のものにキャストする必要があるという印象を受けました。運の悪いコールバック用に設計された Jack タイプにキャストするなど、いくつかのことを試しました。以下は、「JackProcessCallback」の API から掘り出された行です。
typedef int(* JackProcessCallback)(jack_nframes_t nframes, void *arg)
このコンパイラエラーが何を示唆しているのか、または私が間違っている可能性があることについて、誰かが光を当てることができますか?
ありがとう!