我正在使用 JNI 中的 sppex 开发编码机制。我从java调用Encode方法,
遵循运行正常的c代码。
short in_short[FRAME_SIZE];
short out_short[FRAME_SIZE];
short out[FRAME_SIZE];
char cbits[200];
int nbBits;
int i;
void *st;
SpeexBits bits;
/*read file as short array and encode that fram and store in file */
while (!feof(fin))
{
fread(in_short, sizeof(short), frame_size, fin);
if (feof(fin))
break;
speex_bits_reset(&bits);
speex_encode_int(st, in_short, &bits);
nbBits = speex_bits_write(&bits, cbits, 200);
fwrite(&cbits,sizeof(char),nbBits,fout);
}
这个 C 代码编码很好。
当我使用 JNI 实现它时,在 java 中将文件读取为短数组并调用 JNI 编码,编码的数据不正确。
这是JNI代码
jbyteArray Java_com_argusoft_JNIActivity_encode(JNIEnv *env, jobject obj, jshortArray lin){
jbyteArray returnVal;
jshort buffer[enc_frame_size]; // enc_frame_size =160
jbyte output_buffer[enc_frame_size];
int i, tot_bytes = 0;
speex_bits_reset(&ebits);
(*env)->GetShortArrayRegion(env,lin, 0,enc_frame_size, buffer);
speex_encode_int(enc_state1, buffer, &ebits);
tot_bytes = speex_bits_write(&ebits,output_buffer,enc_frame_size);
returnVal = ((*env)->NewByteArray(env, tot_bytes));
(*env)->SetByteArrayRegion(env,returnVal, 0, tot_bytes,output_buffer);
return returnVal;
}`
请,.你能在上面的代码中发现任何错误吗,..提前谢谢。