我想知道JNI是否接受使用.cpp中声明的全局变量(以及我创建的类型)。
这将是一个语音识别程序。实际上,我想使用C声明解码器和Java的所有设置来管理Android上的录制内容。我不想在Java上创建一个Decoder类,因为它应该在Android和iOS上使用(我希望有3个独立的部分:
1)设置解码器(仅限C)
2)进行录制和管理线程(仅限Android-java)
3)解码音频(在java中但调用将使用解码器设置的C函数)
示例:
function.cpp:
struct decoder {
char *model;
};
在function_2.ccp文件中:
decoder *ps;
void set_decoder(char *modelToUse){
ps->model = modelToUse;
return;
}
void process(int *buf ) {
process_raw(ps, buf); // modify buf accordingly to the parameters of ps
return;
}
char *getHyp (){
return ps->hyp;
}
void main(){
ps = set_decoder(var1);
jclass = android_class = (*env)->FindClass(env,"android/app/nameofactivity");
// find method_ID
jmethodID android_mid = (*env)->GetStaticMethodID(env, android_class, "java_method",String_signature);
// call method
jString hyp_java = (*env)->CallIntMethod(env, android_class, android_mid, int samplerate);
EDIT (add these lines) :
const char *hyp_tmp = (*env)->GetStringUTFChars(env, hyp_java, 0);
const char *hyp = hyp_tmp;
printf(hyp_java);
(*env)->ReleaseStringUTFChars(env, hyp_java, hyp_tmp);
//END of EDIT
}
在java文件中(方法process和getHyp声明为本机方法; read方法是Android的方法): file.java
String java_method(int samplerate){
int buf[samplerate];
recorder.read(buf);
this.process(buf);
return this.getHyp();
}
有可能吗?
编辑:简而言之,我想知道我是否可以在C中声明一个全局变量“ps”然后调用一个java函数来调用其他将使用声明变量“ps”的值的C函数。