OpenSL ES 中是不是有与 OpenAL <alc.h> 等效的版本?

Posted

技术标签:

【中文标题】OpenSL ES 中是不是有与 OpenAL <alc.h> 等效的版本?【英文标题】:Is there an equivalent to OpenAL <alc.h> in OpenSL ES?OpenSL ES 中是否有与 OpenAL <alc.h> 等效的版本? 【发布时间】:2011-06-04 16:39:19 【问题描述】:

我用 OpenGL ES 渲染并使用 OpenAL 制作声音的 C++ 游戏。为了让它在 iPhone 上工作,我无法使用 ALUT,所以我只使用“al.h”和“alc.h”。

我现在尝试使用最新的 android SDK 构建我的游戏,它支持原生应用程序并通过 OpenSL ES 添加了声音支持。 (我相信 OpenSL ES 之于 OpenAL 就像 OpenGL ES 之于 OpenGL。)

我想知道是否有一个与 OpenSL ES 的“alc.h”文件等效的文件:

#if defined (MYAPP_ios)
#include <OpenAL/al.h>
#include <OpenAL/alc.h>
#elif defined (MYAPP_ANDROID)
#include <EGL/egl.h>
    // alc.h equivalent for OpenSL ES here ?
#else
#include <AL/al.h>
#include <AL/alc.h>
#endif

如果没有,有没有人知道一种在 OpenSL ES 中以与 OpenAL 类似的方式处理上下文和设备的方法(或者可能是一种在不需要“alc.h”的情况下同时处理这两种情况的方法?)。 Android ndk-build 返回的两个错误属于该类型:

错误:ISO C++ 禁止声明没有类型的“ALCcontext”

【问题讨论】:

【参考方案1】:

我在似乎有您要查找的内容的网站上找到了这个: Android OpenAL?

看起来有人能够为 Android 编译 OpenAL。希望这可以帮助您入门!

【讨论】:

我看过但我想知道 OpenAL 的 LGPL 许可证是否禁止使用它:我必须动态链接 OpenAL,这在 iPhone 上是不可能的,但我不知道是否可能(并且容易)在Android上。有人对此有所了解吗? (有关详细信息,请参阅pielot.org/2010/12/14/openal-on-android/#comment-362。 原生库被编译成 Linux .so 共享库,当您最初在 Java 中加载它们时,Android 会将它们加载到内存中。因此,从技术上讲,您应该能够通过在 APK 中替换 .so 或发布新版本的应用程序来用更新的共享库替换它。我相信这符合 LGPL 许可,因为您在技术上链接到共享库。如果我对许可有误,请有人纠正我:\

以上是关于OpenSL ES 中是不是有与 OpenAL <alc.h> 等效的版本?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以直接从 OpenSL ES(适用于 Android)中的音频资产获取字节缓冲区?

Android音视频十三OpenSL ES介绍&基于OpenSL ES实现音频采集

Android音视频十三OpenSL ES介绍&基于OpenSL ES实现音频采集

Android音视频十三OpenSL ES介绍&基于OpenSL ES实现音频采集

Android音视频十三OpenSL ES介绍&基于OpenSL ES实现音频采集

Android OpenSL ES 开发:Android OpenSL 介绍和开发流程说明