1

Javaからこのネイティブメソッドを呼び出したい:
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)

私のJavaコードには次のものがあります:
public native void putSamples(byte[] samples, int nSamples);

このメソッドと関数を橋渡しする JNI 部分を書きたいのですが、ネイティブ関数は 型の引数を期待していますが、からにSAMPLETYPE「変換」する方法がわかりません。jbyteArraySAMPLETYPE

extern "C" JNIEXPORT void Java_com_example_test_SoundTouch_putSamples(JNIEnv *env, jobject thiz, jbyteArray samples ,jint numSamples){
[Some magic to convert samples to FRAMETYPE I guess...]
st.putSamples(???, numSamples); 
}

Eclipse 検索を使用している場合、私が見つけた関連性のある唯一のコードは、次の STTypes.cpp にありました。typedef float SAMPLETYPE;

byte[] を float[] に変換する必要があるということですか?

4

1 に答える 1

0

SAMPLETYPE は実際には float であるため、byte ではなく float を使用する必要があります。

public native void putSamples(float[] samples, int nSamples);

と...

extern "C" JNIEXPORT void Java_com_example_test_SoundTouch_putSamples(JNIEnv *env, jobject thiz, jfloatArray samples ,jint numSamples){
    float *samplesArray = env->GetFloatArrayElements(samples, 0);
    st.putSamples((SAMPLETYPE *)samplesArray, numSamples); 
}
于 2013-08-01T19:26:59.910 に答える