我想从java中调用这个本机方法:
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)
在我的Java代码中,我有这样的代码:
public native void putSamples(byte[] samples, int nSamples);
现在我想编写JNI部分来在这个方法和函数之间架起桥梁,但是本机函数需要一个SAMPLETYPE类型的参数,但是我不知道如何从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[],如果是,如何转换?
发布于 2013-08-02 03:27:00
因为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);
}https://stackoverflow.com/questions/18000734
复制相似问题