mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-11 17:13:37 +02:00
Converted CRLF to LF.
This commit is contained in:
@@ -1,118 +1,118 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>SoundTouch in Android</title>
|
||||
<meta http-equiv="Content-Type"
|
||||
content="text/html; charset=windows-1252">
|
||||
<meta http-equiv="Content-Language" content="en-us">
|
||||
<meta name="author" content="Olli Parviainen">
|
||||
<meta name="description"
|
||||
content="Readme file for SoundTouch library Android compilation">
|
||||
<style> <!-- .normal { font-family: Arial }
|
||||
--></style>
|
||||
</head>
|
||||
<body class="normal">
|
||||
<hr>
|
||||
<h1>SoundTouch in Android</h1>
|
||||
<hr>
|
||||
<h2>Compiling SoundTouch for Android</h2>
|
||||
<p>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.</p>
|
||||
<p style="font-weight: 700">Software prerequisites:</p>
|
||||
<ul>
|
||||
<li>Android SDK environment for developing your own Android application. Visit the <a href="http://developer.android.com/index.html">Android developers' site</a>
|
||||
for more information about the Android SDK and developing Android applications.</li>
|
||||
<li>Android NDK compiler kit for compiling native library binaries. The Android NDK
|
||||
is <a href="http://developer.android.com/tools/sdk/ndk/index.html">
|
||||
available for download</a> at the Android developer tools site.</li>
|
||||
<li>In case you're working in Windows environment, install
|
||||
<a href="http://cygwin.com/install.html">
|
||||
Cygwin</a> to run the Android NDK/SDK compiler scripts</li>
|
||||
<li>Latest SoundTouch source code package available at <a href="http://soundtouch.surina.net/sourcecode.html">
|
||||
soundtouch.surina.net</a>.</li>
|
||||
</ul>
|
||||
<p><b>Hint: </b>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 taking backup snapshots of your full development environment.</p>
|
||||
<p><b>Compiling</b></p>
|
||||
<p>
|
||||
To compile the SoundTouch library source codes into an Android native library,
|
||||
open Cygwin/bash shell, go to directory <b>"soundtouch/source/Android-lib/jni"</b> and invoke the NDK
|
||||
compiler with following command:</p>
|
||||
<pre> $NDK/ndk-build</pre>
|
||||
<p>This will build the ARMv5 and ARMv7 versions of SoundTouch library (including
|
||||
also the example JNI
|
||||
interface, see below) into the "libs" subdirectory.</p>
|
||||
<p>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 <b>~/.bash_profile</b> file, for instance as follows:</p>
|
||||
<pre> NDK=/cygdrive/d/Android/android-ndk-r6</pre>
|
||||
<hr />
|
||||
<h2>
|
||||
Android floating-point performance considerations</h2>
|
||||
<p>
|
||||
Default build target for
|
||||
Android NDK is ARMv5 CPU generation, as that works in
|
||||
all ARM-based Android devices.<p>
|
||||
This has a pitfall though: For ideal sound quality SoundTouch should be compiled
|
||||
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.<p>
|
||||
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 with low-end
|
||||
devices.<p>
|
||||
As workaround, the SoundTouch Android compilation builds two separate versions
|
||||
of the library:<ul>
|
||||
<li>ARMv5 version that compiles SoundTouch using integer algorithm version. The integer
|
||||
algorithm version compromises the sound quality but provides good performance also
|
||||
with low-end
|
||||
devices without hardware floating-point support in the CPU level.</li>
|
||||
<li>ARMv7 version that compiles SoundTouch using hardware floating-point algorithms.
|
||||
These algorithms provide ideal sound quality yet do not work in simpler CPU
|
||||
models.</li>
|
||||
</ul>
|
||||
<p>
|
||||
These two library compilations are already defined in file "<b>jni/Application.mk</b>"
|
||||
so that these two separate library targets are automatically built under the "<b>libs</b>"
|
||||
directory. As far as you include both these compiled library versions into your
|
||||
application delivery, the Android devices can automatically select the right
|
||||
library version based on the available device's capabilities.<p>
|
||||
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.<hr />
|
||||
<h2>
|
||||
Calling SoundTouch native routines from Android application</h2>
|
||||
<p>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).</p>
|
||||
<p>
|
||||
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:<ul>
|
||||
<li><b>Android-lib/jni/soundtouch-jni.cpp</b>: This file contains c/c++ routine that
|
||||
calls SoundTouch library routine to return the library version string to the main
|
||||
Android application. The NDK compiles this file along with the SoundTouch
|
||||
routines into the native binary library.</li>
|
||||
<li><b>Android-lib/src/net/surina/soundtouch/SoundTouch.java</b>: This file provides
|
||||
a Java interface class to load the native library and to invoke the native routine implemented in
|
||||
the file <b>soundtouch-jni.cpp</b></li>
|
||||
</ul>
|
||||
<p>
|
||||
Feel free to examine and extend the provided cpp/java source code example file pair to
|
||||
implement and integrate the desired SoundTouch library capabilities into your Android application.</p>
|
||||
<hr />
|
||||
<p style="text-align: center"><i>Copyright © Olli Parviainen</i></p>
|
||||
<!--
|
||||
$Id: README-SoundTouch-Android.html 165 2012-12-28 19:55:23Z oparviai $
|
||||
-->
|
||||
</body>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>SoundTouch in Android</title>
|
||||
<meta http-equiv="Content-Type"
|
||||
content="text/html; charset=windows-1252">
|
||||
<meta http-equiv="Content-Language" content="en-us">
|
||||
<meta name="author" content="Olli Parviainen">
|
||||
<meta name="description"
|
||||
content="Readme file for SoundTouch library Android compilation">
|
||||
<style> <!-- .normal { font-family: Arial }
|
||||
--></style>
|
||||
</head>
|
||||
<body class="normal">
|
||||
<hr>
|
||||
<h1>SoundTouch in Android</h1>
|
||||
<hr>
|
||||
<h2>Compiling SoundTouch for Android</h2>
|
||||
<p>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.</p>
|
||||
<p style="font-weight: 700">Software prerequisites:</p>
|
||||
<ul>
|
||||
<li>Android SDK environment for developing your own Android application. Visit the <a href="http://developer.android.com/index.html">Android developers' site</a>
|
||||
for more information about the Android SDK and developing Android applications.</li>
|
||||
<li>Android NDK compiler kit for compiling native library binaries. The Android NDK
|
||||
is <a href="http://developer.android.com/tools/sdk/ndk/index.html">
|
||||
available for download</a> at the Android developer tools site.</li>
|
||||
<li>In case you're working in Windows environment, install
|
||||
<a href="http://cygwin.com/install.html">
|
||||
Cygwin</a> to run the Android NDK/SDK compiler scripts</li>
|
||||
<li>Latest SoundTouch source code package available at <a href="http://soundtouch.surina.net/sourcecode.html">
|
||||
soundtouch.surina.net</a>.</li>
|
||||
</ul>
|
||||
<p><b>Hint: </b>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 taking backup snapshots of your full development environment.</p>
|
||||
<p><b>Compiling</b></p>
|
||||
<p>
|
||||
To compile the SoundTouch library source codes into an Android native library,
|
||||
open Cygwin/bash shell, go to directory <b>"soundtouch/source/Android-lib/jni"</b> and invoke the NDK
|
||||
compiler with following command:</p>
|
||||
<pre> $NDK/ndk-build</pre>
|
||||
<p>This will build the ARMv5 and ARMv7 versions of SoundTouch library (including
|
||||
also the example JNI
|
||||
interface, see below) into the "libs" subdirectory.</p>
|
||||
<p>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 <b>~/.bash_profile</b> file, for instance as follows:</p>
|
||||
<pre> NDK=/cygdrive/d/Android/android-ndk-r6</pre>
|
||||
<hr />
|
||||
<h2>
|
||||
Android floating-point performance considerations</h2>
|
||||
<p>
|
||||
Default build target for
|
||||
Android NDK is ARMv5 CPU generation, as that works in
|
||||
all ARM-based Android devices.<p>
|
||||
This has a pitfall though: For ideal sound quality SoundTouch should be compiled
|
||||
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.<p>
|
||||
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 with low-end
|
||||
devices.<p>
|
||||
As workaround, the SoundTouch Android compilation builds two separate versions
|
||||
of the library:<ul>
|
||||
<li>ARMv5 version that compiles SoundTouch using integer algorithm version. The integer
|
||||
algorithm version compromises the sound quality but provides good performance also
|
||||
with low-end
|
||||
devices without hardware floating-point support in the CPU level.</li>
|
||||
<li>ARMv7 version that compiles SoundTouch using hardware floating-point algorithms.
|
||||
These algorithms provide ideal sound quality yet do not work in simpler CPU
|
||||
models.</li>
|
||||
</ul>
|
||||
<p>
|
||||
These two library compilations are already defined in file "<b>jni/Application.mk</b>"
|
||||
so that these two separate library targets are automatically built under the "<b>libs</b>"
|
||||
directory. As far as you include both these compiled library versions into your
|
||||
application delivery, the Android devices can automatically select the right
|
||||
library version based on the available device's capabilities.<p>
|
||||
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.<hr />
|
||||
<h2>
|
||||
Calling SoundTouch native routines from Android application</h2>
|
||||
<p>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).</p>
|
||||
<p>
|
||||
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:<ul>
|
||||
<li><b>Android-lib/jni/soundtouch-jni.cpp</b>: This file contains c/c++ routine that
|
||||
calls SoundTouch library routine to return the library version string to the main
|
||||
Android application. The NDK compiles this file along with the SoundTouch
|
||||
routines into the native binary library.</li>
|
||||
<li><b>Android-lib/src/net/surina/soundtouch/SoundTouch.java</b>: This file provides
|
||||
a Java interface class to load the native library and to invoke the native routine implemented in
|
||||
the file <b>soundtouch-jni.cpp</b></li>
|
||||
</ul>
|
||||
<p>
|
||||
Feel free to examine and extend the provided cpp/java source code example file pair to
|
||||
implement and integrate the desired SoundTouch library capabilities into your Android application.</p>
|
||||
<hr />
|
||||
<p style="text-align: center"><i>Copyright © Olli Parviainen</i></p>
|
||||
<!--
|
||||
$Id: README-SoundTouch-Android.html 165 2012-12-28 19:55:23Z oparviai $
|
||||
-->
|
||||
</body>
|
||||
</html>
|
@@ -1,43 +1,43 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Example Interface class for SoundTouch native compilation
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// WWW : http://www.surina.net
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// $Id: soundtouch-jni.cpp 165 2012-12-28 19:55:23Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <jni.h>
|
||||
#include <android/log.h>
|
||||
//#include <string.h>
|
||||
//#include <stdio.h>
|
||||
//#include <dlfcn.h>
|
||||
|
||||
#include "../../../include/SoundTouch.h"
|
||||
//#include "TimeShiftEffect.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Example Interface class for SoundTouch native compilation
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// WWW : http://www.surina.net
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// $Id: soundtouch-jni.cpp 165 2012-12-28 19:55:23Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <jni.h>
|
||||
#include <android/log.h>
|
||||
//#include <string.h>
|
||||
//#include <stdio.h>
|
||||
//#include <dlfcn.h>
|
||||
|
||||
#include "../../../include/SoundTouch.h"
|
||||
//#include "TimeShiftEffect.h"
|
||||
|
||||
#define LOGV(...) __android_log_print((int)ANDROID_LOG_INFO, "SOUNDTOUCH", __VA_ARGS__)
|
||||
//#define LOGV(...)
|
||||
|
||||
|
||||
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
extern "C" DLL_PUBLIC jstring Java_net_surina_soundtouch_getVersionString(JNIEnv *env, jobject thiz)
|
||||
{
|
||||
const char *verStr;
|
||||
|
||||
LOGV("JNI call soundtouch.getVersionString");
|
||||
|
||||
// Call example SoundTouch routine
|
||||
verStr = SoundTouch::getVersionString();
|
||||
|
||||
// return version as string
|
||||
return env->NewStringUTF(verStr);
|
||||
}
|
||||
|
||||
|
||||
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
|
||||
|
||||
using namespace soundtouch;
|
||||
|
||||
extern "C" DLL_PUBLIC jstring Java_net_surina_soundtouch_getVersionString(JNIEnv *env, jobject thiz)
|
||||
{
|
||||
const char *verStr;
|
||||
|
||||
LOGV("JNI call soundtouch.getVersionString");
|
||||
|
||||
// Call example SoundTouch routine
|
||||
verStr = SoundTouch::getVersionString();
|
||||
|
||||
// return version as string
|
||||
return env->NewStringUTF(verStr);
|
||||
}
|
||||
|
@@ -1,29 +1,29 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Example class that invokes native SoundTouch routines through the JNI
|
||||
/// interface.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// WWW : http://www.surina.net
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// $Id: SoundTouch.java 165 2012-12-28 19:55:23Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package net.surina.soundtouch;
|
||||
|
||||
public final class SoundTouch
|
||||
{
|
||||
// Native interface function that returns SoundTouch version string.
|
||||
// This invokes the native c++ routine defined in "soundtouch-jni.cpp".
|
||||
public native final String getVersionString();
|
||||
|
||||
// Load the native library upon startup
|
||||
static
|
||||
{
|
||||
System.loadLibrary("soundtouch");
|
||||
}
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
/// Example class that invokes native SoundTouch routines through the JNI
|
||||
/// interface.
|
||||
///
|
||||
/// Author : Copyright (c) Olli Parviainen
|
||||
/// Author e-mail : oparviai 'at' iki.fi
|
||||
/// WWW : http://www.surina.net
|
||||
///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// $Id: SoundTouch.java 165 2012-12-28 19:55:23Z oparviai $
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package net.surina.soundtouch;
|
||||
|
||||
public final class SoundTouch
|
||||
{
|
||||
// Native interface function that returns SoundTouch version string.
|
||||
// This invokes the native c++ routine defined in "soundtouch-jni.cpp".
|
||||
public native final String getVersionString();
|
||||
|
||||
// Load the native library upon startup
|
||||
static
|
||||
{
|
||||
System.loadLibrary("soundtouch");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user