在开发过程中,在java层将pcm转换为adpcm以及将adpcm转换为pcm,其中算法里面有位移动相对于在c层来说需要大量的时间,所以就将java层的算法移植到c层,使用NDK进行封装成库使用。
Adpcm2PcmInterface.java
package com.adpcm2pcm;
public class Adpcm2PcmInterface {
public static native void Adpcm2Pcm(byte[] data, int size, int sample, int index, byte[] output);
public static native void Pcm2Adpcm(byte[] data, int size, int sample, int index, byte[] output);
static {
try {
System.loadLibrary("adpcm2pcm");
} catch (Exception e) {
e.printStackTrace();
}
}
}
生成的库文件:
libadpcm2pcm.rar(5.63 KB)
我只测试过Adpcm2Pcm这个接口,从远程获取的adpcm数据然后转换为pcm数据播放声音正常的。
NDK基础知识:
javah -classpath classes -d ../jni -jni com.myproject.MyActivity
root@ubuntu:/home/administrator/workspace/OpenGLJni/src# javah -classpath /home/administrator/workspace/OpenGLJni/src -d ../jni/ -jni com.jayce.eopengljni.OpenGLJniLib
参数介绍:
-classpath 指定需要生成.h文件的class文件路径所在,多个路径可用“:”隔开,有时提示Activity没有找到
-d 指定生成的头文件存放目录,这里指定的是项目根目录中的jni目录
-jni 这个选项是可选项,具体可查看man javah
最后一项就是class文件的全称(包名+类名)