【问题标题】:Android : Help in compiling SoundTouch lib in androidAndroid : 帮助在 android 中编译 SoundTouch 库
【发布时间】:2017-11-15 18:04:55
【问题描述】:

我正在尝试使用 Android NDK 编译 SoundTouch 库。我从Here 那里得到了一些指令来在 android 中编译这个库。

但是当我尝试使用 ndk-build 命令编译它时,它会在 SoundTouch lib 的各种源文件中显示错误,如下所示:

我尝试按照说明中的说明关闭异常处理,但它似乎不起作用。

我将 SoundTouch 源中的所有文件复制到我项目的 JNI 文件夹中。这是我的android.mk 文件:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_CFLAGS :- -frtti -fexceptions

LOCAL_SRC_FILES := AAFilter.cpp BPMDetect.cpp cpu_detect_x86.cpp FIFOSampleBuffer.cpp FIRFilter.cpp main.cpp mmx_optimized.cpp PeakFinder.cpp RateTransposer.cpp RunParameters.cpp SoundTouch.cpp sse_optimized.cpp TDStretch.cpp WavFile.cpp

LOCAL_LDLIBS := -lpcap

LOCAL_MODULE := libSoundTouch

LOCAL_C_INCLUDES := BPMDetect.h FIFOSampleBuffer.h FIFOSamplePipe.h SoundTouch.h STTypes.h

include $(BUILD_SHARED_LIBRARY)

谁能帮我在android上编译和使用SoundTouch lib?

更新:

我更改了我的android.mk 文件如下

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_CPP_FEATURES += -fno-exceptions

LOCAL_SRC_FILES := \
     SoundTouch/AAFilter.cpp \
     SoundTouch/BPMDetect.cpp \
     SoundTouch/cpu_detect_x86.cpp\
      SoundTouch/FIFOSampleBuffer.cpp \
      SoundTouch/FIRFilter.cpp \
      SoundTouch/mmx_optimized.cpp \
      SoundTouch/PeakFinder.cpp \
      SoundTouch/RateTransposer.cpp \
      SoundTouch/SoundTouch.cpp \
      SoundTouch/sse_optimized.cpp \
      SoundTouch/TDStretch.cpp 

LOCAL_MODULE := libSoundTouch

LOCAL_C_INCLUDES := include/BPMDetect.h include/FIFOSampleBuffer.h include/FIFOSamplePipe.h include/SoundTouch.h include/STTypes.h

include $(BUILD_SHARED_LIBRARY)

现在一切正常。谢谢

【问题讨论】:

  • 要启用例外,您需要在 Android.mk 文件中使用“LOCAL_CPP_FEATURES := exceptions rtti”。您遇到的第一个错误是什么?具体在哪一行?
  • 嘿,你做了什么来建立这个库?只需将 Android.mk、Aplication.mk 和 soundtouch-jni.cpp 复制到一个新的 android 项目中。并通过 NDK-build 命令构建它......我正在按照这些步骤操作,但它给了我错误......类似于“stackoverflow.com/questions/15662981/…

标签: android c++ android-ndk


【解决方案1】:

我已通过更改我的android.mk 文件成功编译:

这是我的android.mk 文件

include $(CLEAR_VARS)
LOCAL_PATH:= $(call my-dir)

LOCAL_CPP_FEATURES += -fno-exceptions

LOCAL_SRC_FILES := \
     SoundTouch/AAFilter.cpp \
     SoundTouch/BPMDetect.cpp \
     SoundTouch/cpu_detect_x86.cpp\
      SoundTouch/FIFOSampleBuffer.cpp \
      SoundTouch/FIRFilter.cpp \
      SoundTouch/mmx_optimized.cpp \
      SoundTouch/PeakFinder.cpp \
      SoundTouch/RateTransposer.cpp \
      SoundTouch/SoundTouch.cpp \
      SoundTouch/sse_optimized.cpp \
      SoundTouch/TDStretch.cpp 

LOCAL_MODULE := libSoundTouch

LOCAL_C_INCLUDES := include/BPMDetect.h include/FIFOSampleBuffer.h include/FIFOSamplePipe.h include/SoundTouch.h include/STTypes.h

include $(BUILD_SHARED_LIBRARY)

【讨论】:

  • 有人可以帮忙使用这个库吗?
【解决方案2】:

查看THIS 链接,此人已经编译好准备使用 SoundTouch Android 包装器。

  • 目前能够进行时间拉伸和音高转换。
  • 目前仅支持带有 FPU (armeabi-v7a) 的 Android。

示例用法:

//There are currently 16 track id's you can use (0-15), each one has a separate SoundTouch processor.

    //Set your audio processing requirements: track id, channels, samplingRate, bytesPerSample, 
    //                              tempoChange (1.0 is normal speed), pitchChange (in semi-tones)

    SoundTouch soundTouch = new SoundTouch(0, 2, 44100, 2, 1.0f, 2.0f);

    //byte[] sizes are recommended to be 8192 bytes.

    //put a byte[] of PCM audio in the sound processor:
    soundTouch.putBytes(input);

    //write output to a byte[]:
    int bytesReceived = soundTouch.getBytes(output);

    //after you write the last byte[], call finish().
    soundTouch.finish();

    //now get the remaining bytes from the sound processor.
    int bytesReceived = 0;
    do
    {
        bytesReceived = soundTouch.getBytes(output);
        //do stuff with output.
    } while (bytesReceived != 0)

    //if you stop playing, call clear on the track to clear the pipeline for later use.
    soundTouch.clearBuffer()

访问上面的 github 链接了解更多详情。

【讨论】:

  • 这家伙已将代码库移至 github 上的新仓库我已更新链接。 NEW LINK IS THIS
猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多