Android NDK OpenSL ES for Android(中文翻译)

英文原版: Android NDK OpenSL ES for Android

简介

本描述了NDK实现的OpenSL ES与OpenSL ES 1.0.1参考规范之间的区别。当使用标准OpenSL ES的示例代码时,需要做适应的修改来适配Android。

在没有特殊说明的情况下,OpenSL ES的所有特性适用于Android 2.3(API 9)及更高版本。极少数适用于Android 4.0(API 14)的特性已经添加了备注。

注: Android兼容性定义文档(CDD)列举了兼容Android系统的设备所依赖的硬件和软件。有关兼容程序的更多信息详见Android Compatibility,有关CDD的更多信息详见CDD

OpenSL ES提供一系列兼容C++的C语言接口。它提供了与Android Java APIs中音频部分相似的功能,如下:

正如Android原生开发套件(NDK)的设计初衷一样,OpenSL ES for Android被设计用来开发适用于Java原生接口(JNI)的动态链接库。NDK并不提供用于开发原生C/C++应用的能力。OpenSL ES提供了功能完善的API,我们希望你使用这些API来完成大部分音频功能,而不必调用Android运行时环境中的其他接口。

注: 尽管OpenSL ES for Android是基于OpenSL ES开发的……

开始使用

本章节描述了使用 OpenSL ES接口的方法。

示例代码

我们推荐使用NDK自带的示例代码来封装模块或测试,示例代码位于NDK目录下 platforms/android-9/samples/native-audio/,你也可以在Github上找到 android-ndk 的示例代码。

译者注: NDK中提供了两个音频示例项目,audio-echo项目使用了低延迟音频技术,而native-audio项目没有使用。有关低延迟音频技术的情况请搜索”Android的10毫秒问题”关键词。

注: ……

Makefile

为Android.mk添加OpenSL ES库依赖:

LOCAL_LDLIBS += -lOpenSLES

音频内容

下面是一些在APP内打包音频内容的方法:

  • Resources
    把音频文件放在项目的res/raw/目录下,可以通过Resources接口方便的找到它们。然而你不能直接使用(播放)它们,在使用之前需要把它们拷贝到合适的地方。

  • Assets
    把音频文件放在项目的assets/目录下,可以通过asset管理接口直接访问它们。有关asset管理接口的详细信息可以查看 android/asset_manager.h 和 android/asset_manager_jni.h 两个文件。NDK platforms/android-9/samples/native-audio/ 目录下的示例代码使用原生的asset管理接口和Android描述符指定的音频文件进行交互。

。。。

继承自参考规范的特性

未完待续…

扩展阅读

Android的10毫秒问题-解读Android系统音频通道延迟缺陷
iOS and Android Audio Latency Test App

参考