Speex on Android

Posted on April 6, 2011, 1:24 am, by Mario, under Android, OMG Ponies!.

JSpeex does not work very well on Android, encoding times are between 0.03 to 0.2 seconds for a 320 samples frame. Way to much for any real-time app (can you say in-game voice chat? :p). So i set out to get the native speex to compile for Android. A couple of steps are involved if you don’t want to go the configure road with ndk r5b.

  1. Download the latest speex source distri.
  2. Create your project’s folder, and a jni/ folder inside that folder
  3. Copy the libspeex/ and include/ folders from the speex distri to your jni/ folder. You should end up with $project/jni/libspeex and $project/jni/include
  4. Add the following thingy as your Android.mk file in your jni/ folder
    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE    := libspeexLOCAL_CFLAGS = -DFIXED_POINT -DUSE_KISS_FFT -DEXPORT="" -UHAVE_CONFIG_HLOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SRC_FILES :=  \./libspeex/bits.c \./libspeex/buffer.c \./libspeex/cb_search.c \./libspeex/exc_10_16_table.c \./libspeex/exc_10_32_table.c \./libspeex/exc_20_32_table.c \./libspeex/exc_5_256_table.c \./libspeex/exc_5_64_table.c \./libspeex/exc_8_128_table.c \./libspeex/fftwrap.c \./libspeex/filterbank.c \./libspeex/filters.c \./libspeex/gain_table.c \./libspeex/gain_table_lbr.c \./libspeex/hexc_10_32_table.c \./libspeex/hexc_table.c \./libspeex/high_lsp_tables.c \./libspeex/jitter.c \./libspeex/kiss_fft.c \./libspeex/kiss_fftr.c \./libspeex/lpc.c \./libspeex/lsp.c \./libspeex/lsp_tables_nb.c \./libspeex/ltp.c \./libspeex/mdf.c \./libspeex/modes.c \./libspeex/modes_wb.c \./libspeex/nb_celp.c \./libspeex/preprocess.c \./libspeex/quant_lsp.c \./libspeex/resample.c \./libspeex/sb_celp.c \./libspeex/scal.c \./libspeex/smallft.c \./libspeex/speex.c \./libspeex/speex_callbacks.c \./libspeex/speex_header.c \./libspeex/stereo.c \./libspeex/vbr.c \./libspeex/vq.c \./libspeex/window.c include $(BUILD_SHARED_LIBRARY)

  5. Add the following thingy as your Application.mk file in the jni/ folder
    APP_ABI := armeabi armeabi-v7a

    This will compile binaries for the arm and arm-v7a cpus.

  6. Add the following thingy as a file called speex_config_types.h to the $project/jni/include/speex/ folder.
    #ifndef __SPEEX_TYPES_H__#define __SPEEX_TYPES_H__typedef short spx_int16_t;typedef unsigned short spx_uint16_t;typedef int spx_int32_t;typedef unsigned int spx_uint32_t;#endif

  7. switch to the jni/ folder in your shell and type ndk-build. You’ll end up with shared libs in the libs/armeabi and libs/armeabi-v7a folder
  8. Write a JNI wrapper for decoding and encoding
  9. Profit!

I zipped up my jni folder, you can download it here. Just fire up your shell, make sure your NDK is in your $PATH and ndk-build the shit out of it. Enjoy.


转贴:http://www.badlogicgames.com/wordpress/?p=1726&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+PlanetAndroidCom+%28Planet+Android%29

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 字节跳动正式启动2021届秋季校招!这份字节
  2. Android视频采集
  3. Android——进程与线程
  4. Swing中引入Android的NinePatch技术,让Swi
  5. android车载娱乐系统跟android平板的分析
  6. Android(安卓)架构简介
  7. 创业&Android
  8. android:layout_gravity和android:gravit
  9. 借一个项目谈Android应用软件架构,你还在
  10. IBM谷歌等工程师撰写Android开发教程合集