Android OpenAL?

Posted

技术标签:

【中文标题】Android OpenAL?【英文标题】:Android OpenAL? 【发布时间】:2011-02-04 22:46:52 【问题描述】:

有没有人为 android 构建过 OpenAL,或者在系统上找到了它的共享库?这似乎是对任何类型游戏的明显需求,但那里没有资源。据我所知,Android java 声音库似乎无法进行音高更改,因此似乎需要 OpenAL。我知道 OpenAL Soft 可以构建在 ALSA 之上,但我不确定是否有人这样做,而且我敢肯定这需要我一个月的时间。

如果在没有 OpenAL 的情况下在 Android 上进行声音处理的某个地方有很好的指南,那也很好。只是 OpenAL 是游戏制作者的一种标准,将我的数千行移植到这个系统会很好,在我深入研究之前,我认为这是 NDK 的重点,发现几乎没有系统上的共享库访问权限。

谢谢.. 我希望自己能够在不成为 Java 专家的情况下进行移植。到目前为止真的不喜欢 NDK!

【问题讨论】:

【参考方案1】:

您可以使用 NDK 构建 OpenAL 并将其与您的 APK 打包在一起。这样您就可以从本机代码访问它。

【讨论】:

您无法从 NDK 以任何受支持的方式访问低级声音 API(ALSA 等),所以不,您不能这样做。 所以唯一可以使用的api就是那个java:android.media ? 不,你也可以在java中使用soundpool和audiotrack(这是低级的),以及现在在本机代码中的opensl es。 糟糕,抱歉,我以为你的意思是媒体播放器、音池和音轨是 android.media 的一部分。尽管您仍然可以使用 openssl es,但前提是您愿意以 2.2+ 为目标。此外,据我了解,如果您愿意使用 JNI 从 Java 或您的本机代码中调用它,则音轨确实可以让您对音频进行相当低级别的访问。【参考方案2】:

OpenSL 计划用于未来的 Android 版本; OpenAL 不可用,低级硬件禁止您在 NDK 中执行任何操作,因此您无法安全地自己构建它。

甚至没有计划支持低延迟音频;这里有一个错误:

http://code.google.com/p/android/issues/detail?id=3434

如果它与您相关,请加注星标;如果得到足够多的星星,也许 Google 会听。

编辑:Android 4.0+ 中存在低延迟音频,并且 OpenSL 现在可用。请参阅此页面和链接页面:http://source.android.com/devices/audio/latency.html 另请参阅 OpenSL 上的 NDK 指南。

【讨论】:

【参考方案3】:

就在 Google 宣布 3D 音频将包含在 Android 2.3 中之前,我设法为 Android 编译了 OpenAL,并将其打包为共享对象。

见http://pielot.org/2010/12/14/openal-on-android/

如果您想定位设备 ,可能仍然会有所帮助

干杯。

【讨论】:

扩展马丁的回答:他还给出了一些高级使用示例here。【参考方案4】:

现在有几个选项可用于 NDK 音频:

    它不是 OpenAL,但 OpenSL ES 1.0.1 是 API 级别 9 (2.3) 的 NDK 的官方部分。更多信息here。

    OpenAL Soft 在其 git master 中有一个 OpenSL ES 后端(自 1.13 版起未发布)。然而,此时它在 Android 上已被破坏,因为它是为 OpenSL ES 1.1 而不是 1.0.1 编写的。请参阅this commit 以获得修复。

    如上一个答案中所述,OpenAL Soft 的 JNI 后端链接到 here 并将其描述为 2.3 之前的 Android 平台上 OpenAL 的唯一选项。但是,这是 OpenAL Soft 的一个过时分支——我已将后端更新到最新版本 on a github repo here 以及 OpenSL ES 1.0.1 修复程序。还包括一个 untested optional patch,它声称可以提供更好的性能和更少的延迟。

【讨论】:

编辑后给我+1。在这里积极鼓励就旧问题发布(好的)答案,这就是为什么会有badges awarded for it。

以上是关于Android OpenAL?的主要内容,如果未能解决你的问题,请参考以下文章

不满意的链接错误Android Eclipse

无法将 openal soft 与 necessitas 关联

OpenAL不播放声音

OpenAL 2d 平移 C++

OpenAL 3d 定位和平移中心

openal:获取源的当前播放位置