OpenSL ES 播放声音的流程:
###代码
#include “common.hpp”
#include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Android.h>
static SLObjectItf slObject = NULL; // 引擎的上下文
static SLEngineItf createSLEngine()
{
SLresult ret;
SLEngineItf en; // SLEngineItf 本身是指针,不用担心局部变量内存被回收了
/*
SL_API SLresult SLAPIENTRY slCreateEngine( // 创建OpenSLES引擎
SLObjectItf *pEngine, // 上下文
SLuint32 numOptions, // 选择项的数量
const SLEngineOption *pEngineOptions, // 具体的选择项
SLuint32 numInterfaces, // 支持的接口的数量
const SLInterfaceID *pInterfaceIds, // 具体的要支持的接口,是枚举的数组
const SLboolean * pInterfaceRequired // 具体的要支持的接口是开放的还是关闭的,也是一个数组,这三个参数长度是一致的
);
*/
ret = slCreateEngine(&slObject, 0, NULL, 0, NULL, 0);
if (ret!=SL_RESULT_SUCCESS)
{
LOGE("slCreateEngine failed.");
return NULL;
}
/*
SLresult (*Realize) ( // 实例化,将内部的存储做好
SLObjectItf self, // 相当于上下文
SLboolean async // SL_BOOLEAN_FALSE 表示阻塞知道初始化完成,设置为 SL_BOOLEAN_TURE 时立即返回成功,这个时候初始化的执行是异步的
);
*/
ret = (*slObject)->Realize(slObject, SL_BOOLEAN_FALSE);
if (ret!=SL_RESULT_SUCCESS)
{
LOGE("(*slEngine)->Realize failed.");
return NULL;
}
/*
SLresult (*GetInterface) ( // 获取接口
SLObjectItf self, // 上下文