open smile sobre android

23
openSmile:) sobre SO Android

Upload: angel-duran

Post on 26-Sep-2015

39 views

Category:

Documents


9 download

DESCRIPTION

OpenSmile sobre Android con NDK

TRANSCRIPT

openSmile:)

openSmile:)sobre SO AndroidQue se necesita?Codigo Fuente de openSmile:) Android NDK (Native Developer Kit)Android SDK (Software Developer Kit)

ProcedimientoExisten dos maneras de ejecutar openSmile:)Opcion 1: Recompilar codigo fuente desde Android Studio con NDK para generar la librera en multiples arquitecturas (arm64-v8a, armeabi, armeabi-v7a, mips, mips64, x86,, x86_64)Opcion 2: Ejecutar Script que ofrece audEERING para generar la librera utilizable por AndroidStudio.Procedimiento Opcion2 (FCIL)

Descargar NDKDescargar openSmile:)Procedimiento Opcion2Descomprimir openSmile:) sobre /optMover android-ndk-rxxd-linux-x86-64.bin en /optEjecutar android-ndk-rxxd-linux-x86-64.bin para descomprimir (./android-ndk-rxxd-linux-x86-64.bin)Renombrar carpeta resultante android-ndk-rxxd -> android-ndkCrear una carpeta llamada thirdparty (un nivel arriba de la carpeta openSMILE-2.1.0, osea /opt/thirdparty)Mover carpeta android-ndk -> /opt/thirdparty/android-ndk

Procedimiento Opcion2Entrar a /opt/openSMILE-2.1.0Ejecutar Script buildAndroid.shAl terminar tendremos una carpeta ./libs generada por el Script con las librerias compatibles para android.

DESVENTAJA se desconoce la arquitectura para la cual fue compilada.

Procedimiento Opcion2Para incrustar y hacer uso de las librerias resultantes sobre un proyecto en android basta con copiar las librerias de la siguiente manera:

**NOTA:No olvidemos que al no saber laarquitectura resultante para la cualel script compil, debemos copiarla libreria en cada carpeta corres-pondiente a cada arquitectura.

->Procedimiento Opcion2Para hacer uso de la libera es necesario incrustar el siguiente cdigo que carga la libreria en cualquier clase:

Procedimiento Opcion2Para hacer uso de metodos de la libera, es necesario declarar metodos nativos en java, y los cuales deben de cumplir las siguientes caracteristicas:El nombre del metodo debe ser el mismo tanto en java como en c++El numero de argumentos debe de ser el mismo tanto como en el metodo nativo como en el metodo en c++Los tipos de datos entre los metodos c++ y el metodo nativo en java deben de ser equivalentes, en c++ deberan ser declarados con clases Wrapper.El tipo de retorno declarado en el metodo nativo en java debe de ser equivalente al valor de retorno en c++

Resultado Opcion2

Procedimiento Opcion1 (COMPLEJO)

Descargar NDKDescargar openSmile:)Procedimiento Opcion1Descomprimimos lo descargado en las siguientes rutas:NDK -> /opt/android-ndk-rxxdopenSMILE -> /opt/openSMILE-2.1.0

Procedimiento Opcion1A modo de prueba, generamos un nuevo proyecto en android, y a la clase principal, le aadimos un metodo nativo, por ejemplo:private native String saludoDesdeC();

Procedimiento Opcion1A modo de prueba, generamos un nuevo proyecto en android, y a la clase principal, le aadimos un metodo nativo, por ejemplo:private native String saludoDesdeC();

Procedimiento Opcion1Nos vamos a la terminal, y vamos a usar el comando javah, para generar un archivo que se encargara de vincular el codigo C con el codigo Java.Primero nos posicionamos sobre el nivel de las carpetas java y res del proyectocd /app/src/mainDespues ejecutamos el comando javahjavah -d jni -classpath /home/lab-inv-10/Android/Sdk/platforms/android-19/android.jar:/home/lab-inv-10/Android/Sdk/extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar:/home/lab-inv-10/Android/Sdk/extras/android/support/v7/appcompat/libs/android-support-v4.jar:../../build/intermediates/classes/debug/ mx.cicese.ut3.pruebaopensmile.PrincipalProcedimiento Opcion1Nos vamos a la terminal, y vamos a usar el comando javah, para generar un archivo que se encargara de vincular el codigo C con el codigo Java.Primero nos posicionamos sobre el nivel de las carpetas java y res del proyectocd /app/src/mainDespues ejecutamos el comando javahjavah -d jni -classpath /home/lab-inv-10/Android/Sdk/platforms/android-19/android.jar:/home/lab-inv-10/Android/Sdk/extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar:/home/lab-inv-10/Android/Sdk/extras/android/support/v7/appcompat/libs/android-support-v4.jar:../../build/intermediates/classes/debug/ mx.cicese.ut3.pruebaopensmile.PrincipalProcedimiento Opcion1El resultado de ejecutar el comando javah es el siguiente:

Procedimiento Opcion1Generamos un fichero main.c sobre la carpeta jni

Y le damos comportamiento al metodo que se genero en la cabecera de mx_cicese_ut3_pruebaopensmile_Principal.h

Procedimiento Opcion1Configuramos el IDE AndroidStudio para que trabaje con el NDK y pueda compilar los archivos .c y .h que se encuentran dentro de la carpeta jni para que pueda generar las librerias correspondientes en cada arquitectura.Esto lo hacemos aadiendo en el archivo local.properties que se encuentra en la raiz del proyecto la siguiente lineandk.dir=/opt/android-ndk-r10d/

Procedimiento Opcion1Para renombrar la libreria que se va a generar al compilar, abrimos el archivo build.gradle que esta sobre /app/main/src y dentro del contexto defaultConfig aadimos lo siguiente:Ndk {moduleName pruebaOpenSmile}

Procedimiento Opcion1Compilamos, y nos vamos a la carpeta /app/build/intermediates/ndk/debug/lib/ y veremos que tenemos las siguientes carpetas y cada una cuenta con la libreria

Procedimiento Opcion1Por ltimo aadimos cargamos la libreria en la clase principal, y hacemos uso del metodo nativo que aadimos al comienzo. Corremos y notaremos que efectivamente se corrio codigo nativo sobre el dispositivo android.

Procedimiento Opcion1Ahora si aplicamos el mismo procedimiento del ejemplo pero con el codigo de openSMILE esto es lo que sucede.