JNI在Android开发中的应用之--用AudioRecord录音,用AudioTrack播放声音.
例子中的调用思路: Activity->JNI API ->c c->JNI API->Activity
点击"用AudioRecord录音",启动了一条线程,该线程调用native方法startRecord,开始在native层启动录音。在录音的过程中,再将读取到的音频字节数组丢到java层。方法是:->(*jni_env)->CallStaticVoidMethod(jni_env,HelloJniCls, receiveAudioData, read_buff,nread); 然后在Activity中的静态方法 public static void receiveAudioData(byte[] data,int size){
try {
bos.write(data);
bos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}中将数据写到文件.
至于用AudioTrack来播放的流程差不多,就不废话了。
非常要注意的是在:
startRecord.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(){
public void run(){
initOutputStream();
startRecord();
}
}.start();
}
});这里要写个线程,很重要!!!! ,不然会阻塞UI线程的!!!
做这个例子是做一个远程会议产品中要用到底层录音,由于项目中开启录音导致界面很卡,所以通过这个例子找到了原因,那就是录音模块没有在一个非UI线程中运行,导致阻塞UI.
【代码全部已经全部贴上】
