1

我想从java调用这个本地方法:
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)

在我的 Java 代码中,我有这个:
public native void putSamples(byte[] samples, int nSamples);

现在我想编写 JNI 部分来桥接这个方法和函数,但是本机函数需要一个 type 的参数SAMPLETYPE,但我不知道如何从 to '转换jbyteArray' SAMPLETYPE

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 确实是浮点数,因此您应该使用浮点数而不是字节数。

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 回答