Android中支持的OpenSL ES功能

时间:2011-04-01 22:05:50

标签: android c audio android-ndk opensl

Android应该通过可通过NDK访问的OpenSL es API支持3D音频。或多或少有效,我设法通过创建的播放器和输出组合播放声音。但是当我尝试实现一个具有3D位置接口(SL_IID_3DLOCATION常量)的监听器时,这对于播放3D声音是必需的。但是当我尝试将常量设置为SL_BOOLEAN_TRUE时,CreateListener方法的结果为12传递给LogCat。 12是OpenSL es常量SL_RESULT_FEATURE_UNSUPPORTED的值。您可以在下面找到一小部分代码,任何人都可以确认我是否做错了或者该功能是否真的未报告,这意味着OpenSL es实现不支持3D音频?

#define SL_RESULT_FEATURE_UNSUPPORTED       ((SLuint32) 0x0000000C)

const SLInterfaceID listener_ids[] = {SL_IID_3DLOCATION};
const SLboolean listener_req[] = {SL_BOOLEAN_TRUE};

result = (*engine)->CreateListener(engine, &listenerObject, 1, listener_ids, listener_req);
__android_log_print(ANDROID_LOG_VERBOSE, DEBUG_TAG, "CREATE: [%i]", result);

assert(SL_RESULT_SUCCESS == result);




result = (*listenerObject)->Realize(listenerObject, SL_BOOLEAN_FALSE);
__android_log_print(ANDROID_LOG_VERBOSE, DEBUG_TAG, "REALIZE: [%i]", result);

assert(SL_RESULT_SUCCESS == result);

2 个答案:

答案 0 :(得分:2)

您可能需要查看此网站:http://mobilepearls.com/labs/native-android-api/ndk/docs/opensles/。它显示了什么是(更重要的),OpenSL ES API for Android不支持的内容。我没有使用3D位置功能,但是我再也没有这个功能了。

无论如何,也许该网站会为您提供更多相关信息......

答案 1 :(得分:0)

上周我再看一下这个问题时,我可能已经找到了解决方法。我在这里发布了一个可能的第三方库解决方案:

OpenSLES with 3D audio

也许需要它的人可以验证它是否有效。