我是Android编程世界的新手,我已经在互联网上对Android中的JNI实现进行了全面搜索。顺便说一下,有很多方法可以做到这一点,我在C / C ++ for Android中找不到太多关于DSP的文档。
我已经从录音中获得了音频数据(PCM到浮动),我想将数据发送到C / C ++函数来处理这些数据。转换后,我想将数组返回到Java活动以回放结果。是否有关于使用JNI发送和接收数组的简单示例或文档?
我正在使用Windows 7,Eclipse和Cygwin。
提前谢谢
答案 0 :(得分:0)
应该很简单,
要将byteArray从Java传输到C ++,您可以考虑以下示例:
第1步:在java类中调用本机方法声明方法(在我的例子中是一个简单的zip)
private native byte[] jniZipString(byte[] unpackedData, int datasize);
步骤2:在c ++中使用javah.exe生成标头和实现 [注意]从bin / classes foler调用javah(因为你的android编码
javah -jni com.example.JavaClassWithNativeMethods
步骤3:在C ++中接收字节数组并转换为C ++ bytearray
jbyte* tempPointer = env->GetByteArrayElements(jInput, 0);
const char* cinput = (const char*) tempPointer;
int dataSize = (int)env->GetArrayLength(jInput)
第4步:处理您的数据
whatever you do to process the bytearray
步骤5:将生成的字节数组返回到java
jbyteArray result = (env)->NewByteArray(newDataSize);
(env)->SetByteArrayRegion(result, 0, newDataSize, (jbyte *) processedCharArray);
return result;