Android OpenSL ES 介绍和开发流程(七)

2021-01-10 15:56:12 浏览数 (1)

OpenSL ES是什么

OpenSL ES全称为Open Sound Library for Embedded Systems,即嵌入式音频加速标准。OpenSL ES是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速 API。它为嵌入式移动多媒体设备上的本地 应用程序开发者提供了标准化、高性能、低响应时间的音频功能实现方法,同时还实现了软/硬件音频性能的直接跨平台部署,不仅降低了执行难度,而且促进了高级音频市场的发展。

OpenSL ES的设计目标

让应用程序开发人员能够访问高级音频功能,如3D定位音频和MIDI播放,同时努力在制造商和平台之间轻松实现应用程序移植。

OpenSL ES主要功能

  • 基本音频播放和录制。
  • 3D音频效果,包括3D定位音频。
  • 音乐体验增强效果,包括低音增强和环境混响。
  • 缓冲队列。

使用OpenSL ES 的优点

  • 相比于 Java API,避免音频数据频繁在 native 层和 Java 层拷贝,提高效率。
  • 相比于 Java API,可以更灵活地控制参数。
  • 使用 C 代码,可以做深度定制的优化。

OpenSL ES的对象和接口

OpenSL ES 有两个重要的概念 Object 和 Interface,“对象”和“接口”。 (1) 每个 Object 可能会存在一个或者多个 Interface,官方为每一种 Object 都定义了一系列的 Interface。 (2) 每个 Object 对象都提供了一些最基础的操作,比如:Realize,Resume,GetState,Destroy 等等,如果希望使用该对象支持的功能函数,则必须通过其 GetInterface 函数拿到 Interface 接口,然后通过 Interface 来访问功能函数。 (3) 并不是每个系统上都实现了 OpenSL ES 为 Object 定义的所有 Interface,所以在获取 Interface 的时候需要做一些选择和判断。

OpenSL ES常用接口

在OpenSL ES中所有的操作都是通过接口来完成,和java的接口类似,接口提供底层的方法调用。常用的接口有以下几种:

  1. SLObjectItf :对象接口
  2. SLEngineItf :引擎接口
  3. SLPlayItf:播放接口
  4. SLBufferQueueItf :缓冲队列接口
  5. SLVolumeItf : 声量接口

OpenSL ES 的开发流程主要有如下:

(1)音频录制

1、 创建接口對象

2、设置IO设备麦克风,设置buffer队列,设置录制规格

3、创建录音器

4、设置回调函数

5、开发录音

(2)音频播放

1. 创建接口對象

2.创建混音器

3.设置pcm格式的频率位数等信息并建立播放器

4.设置缓冲队列,音量设置和回调函数

5、启动回调函数

0 人点赞