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); 
}
Другие вопросы по тегам