diff --git a/source/Android-lib/README-SoundTouch-Android.html b/source/Android-lib/README-SoundTouch-Android.html index 7beaa7d..b6184c0 100644 --- a/source/Android-lib/README-SoundTouch-Android.html +++ b/source/Android-lib/README-SoundTouch-Android.html @@ -16,39 +16,40 @@

SoundTouch in Android


Compiling SoundTouch for Android

-

SoundTouch source code package contains example project that compiles SoundTouch - into Android native library, and gives an example JNI interface that can invoke - the native SoundTouch routines from an Android application.

+

SoundTouch source code package contains "Android-lib" example project that compiles SoundTouch + source codes into Android native library, and gives an example of JNI interface + for invoking + the native SoundTouch routines from an Android application written in Java.

Software prerequisites:

-

Hint: As setting up all the components and settings for an Android SDK/NDK - environment requires fair effort, I recommend creating a dedicated clean Virtual - Machine environment and installing all the Android developer tools into there. +

Hint: As installing and configuring all the components for an Android SDK/NDK + environment requires fair effort, it's good idea to create a dedicated Virtual + Machine environment for the Android development environment installation. Having the Android developer environment setup in dedicated Virtual Machine allows keeping all these settings isolated from your other PC operations, and - eases creating full backup snapshots of your development environment.

+ eases taking backup snapshots of your full development environment.

Compiling

To compile the SoundTouch library source codes into an Android native library, - open Cygwin/bash shell and go to directory "soundtouch/source/Android-lib/jni" and invoke the NDK - compiler as follows:

+ open Cygwin/bash shell, go to directory "soundtouch/source/Android-lib/jni" and invoke the NDK + compiler with following command:

    $NDK/ndk-build

This will build the ARMv5 and ARMv7 versions of SoundTouch library (including also the example JNI - interface, see below) into "libs" folder.

-

Notice that in order for Cygwin/bash to locate the NDK compile scripts, you'll - need to have the location of the NDK installation defined in environment + interface, see below) into the "libs" subdirectory.

+

Notice that to allow Cygwin/bash to locate the NDK compile scripts, you + need to define the location of the NDK installation defined in environment variable "NDK". That's easiest done by adding the NDK path definition at end of your ~/.bash_profile file, for instance as follows:

    NDK=/cygdrive/d/Android/android-ndk-r6
@@ -56,63 +57,62 @@

Android floating-point performance considerations

- Android NDK builds default compilation for ARMv5 CPU generation that works in + Default build target for + Android NDK is ARMv5 CPU generation, as that works in all ARM-based Android devices.

This has a pitfall though: For ideal sound quality SoundTouch should be compiled - to use floating-point algorithms, however, some low-end Android devices do not - have floating-point hardware in their CPU, and hence the default ARMv5 compilation uses software-emulation for floating-point calculations instead of - hardware floating-point instructions to support also these low-end devices.

+ to use floating-point algorithms, however, all low-end Android devices do not + have floating-point hardware in their CPUs, and hence the default ARMv5 compilation uses software-emulation for floating-point calculations instead of + hardware floating-point to allow running the binary executables also in low-end devices.

The floating point software-emulation is however several tens of times slower than real hardware-level floating-point calculations, making - floating-point-intensive applications such as SoundTouch infeasible for low-end + floating-point-intensive applications such as SoundTouch infeasible with low-end devices.

As workaround, the SoundTouch Android compilation builds two separate versions of the library:

- These two library compilations are defined in file "jni/Application.mk" - and results in automatically building two separate library targets under the "libs" + These two library compilations are already defined in file "jni/Application.mk" + so that these two separate library targets are automatically built under the "libs" directory. As far as you include both these compiled library versions into your - application delivery, the Android environment can automatically select the right - library version based on the customer device capabilities.

+ application delivery, the Android devices can automatically select the right + library version based on the available device's capabilities.

Please yet be aware that depending on capabilities of the Android devices you will need to provide the SoundTouch routines with samples in either integer or floating-point format, so build your interface routines to take this into account.


Calling SoundTouch native routines from Android application

-

The NDK tools build SoundTouch c++ routines into a native binary library, while - Android applications are written in Java language. To call SoundTouch and other c/c++ +

The NDK tools build the SoundTouch c++ routines into a native binary library, while + Android applications are written in Java language. To call the SoundTouch and other c/c++ routines from an Android java application code, you'll need to use Java Native Interface (JNI).

- The SoundTouch source code package provides an example how to + The SoundTouch source code package provides source code example how to use JNI to call native c++ routines from a Java class through the following source code file pair:

Feel free to examine and extend the provided cpp/java source code example file pair to - implement and integrate the desired SoundTouch library behavior into your Android application.

+ implement and integrate the desired SoundTouch library capabilities into your Android application.


Copyright © Olli Parviainen

\ No newline at end of file diff --git a/source/Android-lib/jni/Android.mk b/source/Android-lib/jni/Android.mk index 0c6fd87..f177695 100644 --- a/source/Android-lib/jni/Android.mk +++ b/source/Android-lib/jni/Android.mk @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# $Id: Android.mk 327 2012-03-25 18:26:07Z olli $ +# $Id$ LOCAL_PATH := $(call my-dir) @@ -21,9 +21,10 @@ include $(CLEAR_VARS) # *** Remember: Change -O0 into -O2 in add-applications.mk *** LOCAL_MODULE := soundtouch -LOCAL_SRC_FILES := soundtouch-jni.cpp ../../SoundTouch/AAFilter.cpp \ - ../../SoundTouch/FIFOSampleBuffer.cpp ../../SoundTouch/FIRFilter.cpp ../../SoundTouch/cpu_detect_x86.cpp \ - ../../SoundTouch/RateTransposer.cpp ../../SoundTouch/SoundTouch.cpp ../../SoundTouch/TDStretch.cpp +LOCAL_SRC_FILES := soundtouch-jni.cpp ../../SoundTouch/AAFilter.cpp ../../SoundTouch/FIFOSampleBuffer.cpp \ + ../../SoundTouch/FIRFilter.cpp ../../SoundTouch/cpu_detect_x86.cpp \ + ../../SoundTouch/RateTransposer.cpp ../../SoundTouch/SoundTouch.cpp \ + ../../SoundTouch/TDStretch.cpp ../../SoundTouch/BPMDetect.cpp ../../SoundTouch/PeakFinder.cpp # for native audio LOCAL_LDLIBS += -lgcc diff --git a/source/Android-lib/jni/Application.mk b/source/Android-lib/jni/Application.mk index 5f75683..4cc6c6b 100644 --- a/source/Android-lib/jni/Application.mk +++ b/source/Android-lib/jni/Application.mk @@ -1,4 +1,4 @@ -# $Id: Application.mk 222 2011-12-13 21:07:38Z olli $ +# $Id$ # # Build both ARMv5TE and ARMv7-A machine code. # diff --git a/source/Android-lib/jni/soundtouch-jni.cpp b/source/Android-lib/jni/soundtouch-jni.cpp index 7cb5509..f2a770c 100644 --- a/source/Android-lib/jni/soundtouch-jni.cpp +++ b/source/Android-lib/jni/soundtouch-jni.cpp @@ -8,7 +8,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// $Id: jni-routines.cpp 222 2011-12-13 21:07:38Z olli $ +// $Id$ // //////////////////////////////////////////////////////////////////////////////// diff --git a/source/Android-lib/src/net/surina/soundtouch/SoundTouch.java b/source/Android-lib/src/net/surina/soundtouch/SoundTouch.java index 19c8aec..9f75692 100644 --- a/source/Android-lib/src/net/surina/soundtouch/SoundTouch.java +++ b/source/Android-lib/src/net/surina/soundtouch/SoundTouch.java @@ -9,7 +9,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// $Id: jni-routines.cpp 222 2011-12-13 21:07:38Z olli $ +// $Id$ // ////////////////////////////////////////////////////////////////////////////////