使用jni开发音频转码器(二)

2014-11-24 08:14:34 · 作者: · 浏览: 1
*GetMethodID)(JNIEnv*, jclass, const char*, const char*); jmethodID methodid = (*env)->GetMethodID(env, clazz, setConvertProgress, (I)V); if (methodid == 0) { LOGI(can't find methodid); } LOGI( find methodid); //3 .调用方法 // void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...); (*env)->CallVoidMethod(env, obj, methodid, progress); } JNIEXPORT void JNICALL Java_com_njupt_lame_MainActivity_convertmp3 (JNIEnv * env, jobject obj, jstring jwav, jstring jmp3){ char* cwav =Jstring2CStr(env,jwav) ; char* cmp3=Jstring2CStr(env,jmp3); LOGI(wav = %s, cwav);LOGI(mp3 = %s, cmp3); //1.打开 wav,MP3文件 FILE* fwav = fopen(cwav,rb); FILE* fmp3 = fopen(cmp3,wb); short int wav_buffer[8192*2]; unsigned char mp3_buffer[8192]; //1.初始化lame的编码器 lame_t lame = lame_init(); //2. 设置lame mp3编码的采样率 lame_set_in_samplerate(lame , 44100); lame_set_num_channels(lame,2); // 3. 设置MP3的编码方式 lame_set_VBR(lame, vbr_default); lame_init_params(lame); LOGI(lame init finish);int read ; int write; //代表读了多少个次 和写了多少次 int total=0; // 当前读的wav文件的byte数目 do{ if(flag==404){ return; } read = fread(wav_buffer,sizeof(short int)*2, 8192,fwav); total += read* sizeof(short int)*2; LOGI(converting ....%d, total);publishJavaProgress(env,obj,total); // 调用java代码 完成进度条的更新 if(read!=0){ write = lame_encode_buffer_interleaved(lame,wav_buffer,read,mp3_buffer,8192); //把转化后的mp3数据写到文件里 fwrite(mp3_buffer,sizeof(unsigned char),write,fmp3); } if(read==0){ lame_encode_flush(lame,mp3_buffer,8192); } }while(read!=0); LOGI( convert finish); lame_close(lame); fclose(fwav); fclose(fmp3); } JNIEXPORT jstring JNICALL Java_com_njupt_lame_MainActivity_getLameVersion( JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,get_lame_version()); } JNIEXPORT void JNICALL Java_com_njupt_lame_MainActivity_stop (JNIEnv * env, jobject obj){ }
4、 Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := Hello
LOCAL_SRC_FILES := bitstream.c fft.c id3tag.c mpglib_interface.c presets.c  quantize.c   reservoir.c tables.c  util.c  VbrTag.c encoder.c  gain_analysis.c lame.c  newmdct.c   psymodel.c quantize_pvt.c set_get.c  takehiro.c vbrquantize.c version.c Hello.c
LOCAL_LDLIBS += -llog

include $(BUILD_SHARED_LIBRARY)


5、移植lame

主要是做好以下几步:

1)将include目录下的lame.h文件拷到jni目录下

2)将libmp3lame中的东西都拷到jni目录下。并删除一些不是以.rc 、.ico、MakeFile..文件

、删除i386那个目录

3)将util.h文件中的第374行左右的类型改成float