JNI在Android开发中的使用之-用AudioRecord录音,用AudioTrack播放声音

JNI在Android开发中的应用之--用AudioRecord录音,用AudioTrack播放声音.例子中的调用思路:Activity-JNI A

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.


【代码全部已经全部贴上】