Android: Помощь в компиляции SoundTouch lib в Android
Я пытаюсь скомпилировать SoundTouch lib с Android NDK. Я получил здесь инструкцию по компиляции этой библиотеки в 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)
Кто-нибудь может помочь мне скомпилировать и использовать SoundTouch lib на Android?
ОБНОВИТЬ:
Я изменил свой 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)
И теперь все работает нормально. Спасибо
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)
Проверьте ЭТУ ссылку, которую этот парень уже скомпилировал, готов к использованию обертки SoundTouch для Android.
- В настоящее время способен растягивать время и изменять высоту тона.
- В настоящее время поддерживает только Android с FPU (armeabi-v7a).
Пример использования:
//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 для более подробной информации.