SoundTouch和JNI

时间:2013-08-01 17:29:51

标签: java c++ android-ndk java-native-interface soundtouch

我想从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 [],如果是这样,怎么做?

1 个答案:

答案 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); 
}