android工程中使用speex源码通过Cygwin生成libspeex.so

来源:互联网 发布:软媒win10优化工具 编辑:程序博客网 时间:2024/06/05 18:44

使用speex源码 通过Cygwin 生成libspeex.so 文件供android使用


Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外,相对于其它编解码器,Speex也很适合网络应用,在网络应用上有着自己独特的优势。同时,Speex还是GNU工程的一部分,在改版的BSD协议中得到了很好的支持



1 下载speex源码  我用的是 speex-1.2rc1


2 在eclipse中创建android应用,直接空应用就可以,什么内容不需要,因为我们不需要在eclipse做任何编译工作


3 在$project下创建jni文件夹,把speex源码目录下的libspeex和include目录及其子目录文件全部拷贝到$project/jni目录下($project/jni/libspeex and $project/jni/include)


4 在$project/jni/include/speex/目录下speex_config_types.h.in文件改为speex_config_types.h文件
编辑内容 
#ifndef __SPEEX_TYPES_H__  
#define __SPEEX_TYPES_H__  
typedef short spx_int16_t;  
typedef unsigned short spx_uint16_t;  
typedef int spx_int32_t;  
typedef unsigned int spx_uint32_t;  
#endif


5 在android中创建含有native本地方法的类Speex,我的包名是com.sleaf.speex.encode

参考源码中代码


进入cmd控制台,进入src文件夹下
用javah -jni com.sleaf.speex.encode.Speex(注意大小写) 生成头文件

com_sleaf_speex_encode_Speex.h

这个文件是自动生成的不要去修改它


当然这里的前提是你有在环境变量中配置好java环境,要配置到bin下,面里面含有javah.exe


6 把头文件com_sleaf_speex_encode_Speex.h拷贝到$project/jni下


7 在$project/jni下创建JNI包装类speex_jni.cpp,用来调用Speex中的C代码函数

参考源码中代码



8 准备工作都做完了,现在只需要在Cygwin下生成libspeex.so


打开Cygwin工具,切换到项目根目录(我项目是在E:\workspace\speex),输入$NDK_ROOT/ndk-build


NDK_ROOT 是你本机上配置好的NDK的环境变量


9 把对应Speex类文件拷贝到要使用的工程中,包名不能换不然会报错。同时把含有libspeex.so的libs拷贝到要使用工程的libs中。这时我们就可以通过本地方法使用speex了


附上源码http://download.csdn.net/detail/sleafye/8347247

直接在Cygwin中即可编译



0 0
原创粉丝点击