[jni] 04_Lame编码器1-Lame编码器的UI

Android 4.0

Lame编码器的UI 

一、Lame介绍 音频编码器
lame3.99下载
http://sourceforge.net/projects/lame/files/lame/3.99/ 
二、LameUI界面 

核心代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <jni.h>
#include <android/log.h>
#include "cn_zengfansheng_lame_MainActivity.h"
#define LOG_TAG "System.out.c"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

//Jstring2CStr 把java中的jstring的类型转化成一个c语言中的char 字符串
charJstring2CStr(JNIEnv* env, jstring jstr) {
    char* rtn = NULL;
    jclass clsstring = (*env)->FindClass(env, "java/lang/String"); //String
    jstring strencode = (*env)->NewStringUTF(env, "GB2312"); // 得到一个java字符串 "GB2312"
    jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes","(Ljava/lang/String;)[B"); //[ String.getBytes("gb2312");
    jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid,strencode); // String .getByte("GB2312");
    jsize alen = (*env)->GetArrayLength(env, barr); // byte数组的长度
    jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
    if (alen > 0) {
        rtn = (char*) malloc(alen + 1);         //"\0"
        memcpy(rtn, ba, alen);
        rtn[alen] = 0;
    }
    (*env)->ReleaseByteArrayElements(env, barr, ba, 0);
    return rtn;
}
JNIEXPORT void JNICALL Java_cn_zengfansheng_lame_MainActivity_convertToMp3
(JNIEnv *env, jobject obj, jstring jstr_src , jstring jstr_dst) {
    //1、获取java代码传递过来的要转码的源文件,和转码后存放的路径,转换成c语言的char字符
    char* cstr_src = Jstring2CStr(env,jstr_src);
    char* cstr_dst = Jstring2CStr(env,jstr_dst);
    //2、LOGD测试下
    LOGD("src=%s",cstr_src);
    LOGD("dst=%s",cstr_dst);
}
结果: