2012-07-02 30 views
2

我想編譯Android NDK的SoundTouch庫。我從Here得到了一些指令在android中編譯這個庫。在SoundTouch LIB像這樣不同的源文件Android:在編譯SoundTouch lib中的Android的幫助

但是,當我嘗試用ndk-build命令編譯它,它顯示錯誤:enter image description here

我試圖以指令中所提到的關閉異常處理,但它不似乎工作。

我將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?

UPDATE:

我改變了我的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) 

而現在是所有工作的罰款。謝謝

+0

要啓用異常,您需要在Android.mk文件中使用「LOCAL_CPP_FEATURES:= exceptions rtti」。你得到的第一個錯誤是什麼,在哪條線上? –

+0

嘿,你已經做了什麼來建立這個庫?只需將Android.mk,Aplication.mk和soundtouch-jni.cpp複製到一個新的android項目中即可。並通過NDK生成命令構建它...我按照這些步驟,但它給了我錯誤...類似於「http://stackoverflow.com/questions/15662981/soundtouch-building-with-android-ndk」 –

回答

2

我已經成功地通過改變我的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) 
+0

感謝分享。編譯工作正常。 – Hyndrix

+1

任何人都可以使用這個庫嗎? –

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上鍊路的更多細節。

+0

鏈接無法正常顯示404 –

+0

這傢伙已將代碼庫移至新的github上的回購我已更新鏈接。 [新的鏈接是這個](https://github.com/VladimirKulyk/SoundTouch-Android) –