Ява — SoundTouch и JNI

Я хочу вызвать этот нативный метод из 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);
}

При использовании поиска затмения единственный, казалось бы, релевантный фрагмент кода, который я нашел, был в STTypes.cpp, который: typedef float SAMPLETYPE;

Означает ли это, что я должен преобразовать свой байт [] в число с плавающей точкой [], если да, то как?

1

Решение

Поскольку SAMPLETYPE действительно является float, вы должны использовать 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]