SoundTouch+pjsip实现萝莉音

首先要理解一下pjsip音频流媒体是如何工作的,port之间是怎样连接的,音频流是如何在port之间传递的
理解音频媒体流

梳理下soundtouch源码目录结构,前三个目录都是例子,第四个源码,第五个是在源码的基础上又封装了一层接口,我的做法是直接把源码和封装的接口一起编。


soundtouch源码目录结构

一、如何用NDK编译Android版本的Soundtouch库
首先在要编译的目录下创建jni目录,然后新建Android.mk和Application.mk并编写脚本,脚本具体咋写,可以问度娘


jni目录中的文件

[Android.mk]

LOCAL_PATH := $(call my-dir)
soundtouch_la_SOURCES := ./SoundTouch/AAFilter.cpp  ./SoundTouch/FIFOSampleBuffer.cpp \
                ./SoundTouch/FIRFilter.cpp ./SoundTouch/cpu_detect_x86.cpp \
                ./SoundTouch/sse_optimized.cpp \
                ./SoundTouch/RateTransposer.cpp ./SoundTouch/SoundTouch.cpp \
                ./SoundTouch/InterpolateCubic.cpp ./SoundTouch/InterpolateLinear.cpp \
                ./SoundTouch/InterpolateShannon.cpp ./SoundTouch/TDStretch.cpp \
                ./SoundTouch/BPMDetect.cpp ./SoundTouch/PeakFinder.cpp

soundtouch_la_SOURCES += SoundTouchLib.cpp
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../include $(LOCAL_PATH)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
# *** Remember: Change -O0 into -O2 in add-applications.mk ***

LOCAL_MODULE    := lb_android_sound_touch
LOCAL_SRC_FILES := $(soundtouch_la_SOURCES)

# for native audio
LOCAL_SHARED_LIBRARIES += -lgcc
# --whole-archive -lgcc
# for logging
LOCAL_LDLIBS    += -llog
# Use ARM instruction set instead of Thumb for improved calculation performance in ARM CPUs
LOCAL_ARM_MODE := arm
include $(BUILD_SHARED_LIBRARY)

[Application.mk]

#
# Build library bilaries for all supported architectures
#
APP_ABI := armeabi
APP_OPTIM := release
APP_STL := c++_static
APP_CPPFLAGS := -fexceptions # -D SOUNDTOUCH_DISABLE_X86_OPTIMIZATIONS

然后执行ndk-build就会生成你需要的xxxx.so文件了


编译生成so

然后把生成的so和头文件拷贝到你的项目中,这里就不方便展示了。我这里拷贝到pjsua的项目中,然后改写了一下公司项目的makefile和ndk编译脚本。

二、如何用windows vs环境下编译soundtouch库
新建一个项目,把soundtouch源代码和头文件放进来


windows下soundtouch项目目录结构

我这里改写了源码中的头文件,所以要在项目属性里简单配置一下dll导出宏,另外记得在项目属性里把soundtouch里的include文件夹也包含进来。没有改写头文件的后一张图就不用做啦。


头文件
项目属性

项目属性

然后编译,编译完会生成.lib和.dll,.lib和头文件要拷贝到你项目中的相应位置,dll拷贝到你项目的运行目录,相信大家都不陌生。这里也不方便展示了。


vs编译soundtouch

如何在pjsip中添加soundtouch实现变声,我的做法是自己实现一个port然后连接到pjsip抽象的sound_port后面,将音频流传进会议桥,具体后面细讲。

你可能感兴趣的:(SoundTouch+pjsip实现萝莉音)