JavaからALSAライブラリ関数を呼び出すためにJNAを使用しようとしています。私は基本的なオープン/クローズAPI snd_pcm_open()とsnd_pcm_close()を呼び出すことに成功していますので、ライブラリのロードとOKの基本がわかります。JLSからALSA割り当て#defineを呼び出す方法は?
私のアプリケーションがALSAで行う必要があることは、ハードウェアパラメータ構造体を割り当てるためにsnd_pcm_hw_params_alloca()を呼び出すことです。
#define snd_pcm_hw_params_alloca(ptr) __snd_alloca(ptr, snd_pcm_hw_params)
それは、このように呼ばれることになるCアプリケーションの場合:しかし、これはマクロではなく、シンボルとしてC header fileに定義されている
snd_pcm_hw_params_t *params;
snd_pcm_hw_params_alloca(¶ms);
と「paramsが」その後、多くの後続のに渡され、 API呼び出し。
私はCの専門家ではありませんが、これが何をしているのか正確には分かりません。 Iは、構造のメモリ割り当てを期待するが、ヘッダファイルの次の行は次のようsnd_pcm_hw_paramsを定義:これはマクロが関数へのポインタを返す意味
int snd_pcm_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
? JPAでこれをどのようにモデル化できますか?
ハードウェアパラメータの割り当ては、通常、 'snd_pcm_hw_params_malloc'を使って行われます。あなたが話している関数は、ヒープの代わりにスタックにメモリを割り当てます。私はJavaの専門家ではないが、スタック割り当てがJavaアプリケーションのために機能するとは思わない。 – tay10r