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

2014-11-24 08:14:34 · 作者: · 浏览: 2

一、程序运行效果图

\

二、下载链接

三、实现

1、main.xml


  

  



    
    
   

    
   
    
    
   
  


2、MainActivity

package com.njupt.lame;

import java.io.File;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends Activity {

	private EditText et_wav;
	private EditText et_mp3;
	private ProgressDialog pd;
	
	public native void convertmp3(String wav,String mp3);
	public native String getLameVersion();
	public native void stop();
	
	static{
		System.loadLibrary(Hello);
	}
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	    
		et_wav = (EditText) findViewById(R.id.editText1);
		et_mp3 = (EditText) findViewById(R.id.editText2);
		
		pd = new ProgressDialog(this);
	}

	public void convert(View view){
		final String mp3name = et_mp3.getText().toString().trim();
	    final String wavname = et_wav.getText().toString().trim();
	    
	    File file = new File(wavname);
	    int size = (int) file.length();
	    
	    System.out.println(file size:  + size);
	    
	    if(.equals(mp3name) ||.equals(wavname)){
	    	Toast.makeText(this, path can not be null.., 1).show();
	    	return ;
	    }
	    
	    pd.setMessage(converting....);
	    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
	    pd.setMax(size);
	    
	    pd.show();
	    
	    
	    new Thread(){
	    	public void run() {
	    		convertmp3(wavname, mp3name);
	    		pd.dismiss();
	    	};
	    }.start();
	}
	
	public void setConvertProgress(int progress){
		pd.setProgress(progress);
	}
	
	
	public void getversion(View view){
		String version = getLameVersion();
		Toast.makeText(this, version, 1).show();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


3、Hello.c

#include 
  
   
#include 
   
     #include com_njupt_lame_MainActivity.h #include 
    
      #include 
     
       #define LOG_TAG System.out #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) int flag = 0; char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env, java/lang/String); jstring strencode = (*env)->NewStringUTF(env, GB2312); jmethodID mid = (*env)->GetMethodID(env, clsstring, getBytes, (Ljava/lang/String;)[B); jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte(GB2312); jsize alen = (*env)->GetArrayLength(env, barr); jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE); if (alen > 0) { rtn = (char*) malloc(alen + 1); // memcpy(rtn, ba, alen); rtn[alen] = 0; } (*env)->ReleaseByteArrayElements(env, barr, ba, 0); // return rtn; } void publish
      JavaProgress(JNIEnv * env, jobject obj, jint progress) { // 调用java代码 更新程序的进度条 // 1.找到java的LameActivity的class // jclass (*FindClass)(JNIEnv*, const char*); jclass clazz = (*env)->FindClass(env, com/njupt/lame/MainActivity); if (clazz == 0) { LOGI(can't find clazz); } LOGI( find clazz); //2 找到class 里面的方法定义 // jmethodID (