我想从java中调用这个本机方法:
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)
在我的Java代码中,我有这个:
public native void putSamples(byte[] samples, int nSamples);
现在我想编写JNI部分以在此方法和函数之间架起桥梁,但本机函数需要SAMPLETYPE
类型的参数,但我不知道如何从{{1}'转换'到jbyteArray
。
SAMPLETYPE
如果使用eclipse搜索,我发现的唯一看似相关的代码片段是STTypes.cpp,即: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);
}
这是否意味着我必须将我的byte []转换为float [],如果是这样,怎么做?
答案 0 :(得分:0)
由于SAMPLETYPE真的是浮点数,你应该使用float而不是byte。
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);
}