移植soundtouch到android 通过JNI来调用(二)

22 篇文章 1 订阅
7 篇文章 0 订阅

上一篇博客中写到了如何编译和安装soundtouch

当安装soundtouch到你的ubuntu中后你可以通过运行soundstretch来体验一下soundtouch的用法,

当然如果你运行soundstretch提示找不到lib的话你需要将/usr/local/lib 下面与soundtouch相关的lib放到/usr/lib下面


至于soundstretch的用法,可以通过自带的文档来了解。

下面进入正题来通过NDK来编译soundtouch 的jni lib

先贴出我的Application.mk

#Begin:added by vincnet 2012-11-19

# The ARMv7 is significanly faster due to the use of the hardware FPU
APP_ABI := armeabi
APP_PLATFORM := android-9
APP_STL := gnustl_static
#APP_MODULES := soundtouch \
               jniSoundTouch

#End


我先也没有加Application.mk文件,这个在一般的jni lib编译中并不是必须的。

但是soundtouch必须要  它里面用到了c++的一些标准容器所以需要用APP_STL来指定STL库


下面贴出我的Android.mk文件

#Begin:added by vincent 2012-11-19

#autor: Vincent Luo
#data : Nov17 2012
#==================soundtouch lib=====================
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := soundtouch
LOCAL_C_INCLUDES := $(LOCAL_PATH)/soundtouch/include
LOCAL_SRC_FILES :=      soundtouch/source/AAFilter.cpp \
                        soundtouch/source/FIRFilter.cpp \
                        soundtouch/source/RateTransposer.cpp \
                        soundtouch/source/sse_optimized.cpp \
                        soundtouch/source/BPMDetect.cpp \
                        soundtouch/source/RunParameters.cpp \
                        soundtouch/source/TDStretch.cpp \
                        soundtouch/source/cpu_detect_x86.cpp \
                        soundtouch/source/mmx_optimized.cpp  \
                        soundtouch/source/SoundTouch.cpp \
                        soundtouch/source/WavFile.cpp \
                        soundtouch/source/FIFOSampleBuffer.cpp \
                        soundtouch/source/PeakFinder.cpp \
                        soundtouch/source/main.cpp
LOCAL_CFLAGS += -DANDROID
include $(BUILD_STATIC_LIBRARY)

#==================soundtouch jni lib=================
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
#LOCAL_PREBUILT_LIBS:= \
    libsoundtouch.a
LOCAL_MODULE    := jniSoundTouch    
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/soundtouch/include
#LOCAL_SRC_FILES := jniSoundTouch.cpp
LOCAL_LDLIBS    := -lm -llog -landroid
LOCAL_STATIC_LIBRARIES := soundtouch
include $(BUILD_SHARED_LIBRARY)

#End


其中的jniSoundTouch.cpp就需要自己来写JNI的接口供上层来调用了,这里就不贴出来了。

另外需要指名的是编译过程中会遇到关于异常处理方面的东西,我们需要将

STTypes.h中150行的

 #define ST_NO_EXCEPTION_HANDLING    1

宏打开,将异常处理去除掉。然后将还有两个地方中有使用try catch的用这个宏来注释一下。

这样就可以编译出一个静态库libsoundtouch.a和libjniSoundTouch.so  我们在java代码中只需要加载动态库


到此,soundtouch的编译工作完成。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值