用于多跨平台使用的音频库 C++(iphone、android...)
Posted
技术标签:
【中文标题】用于多跨平台使用的音频库 C++(iphone、android...)【英文标题】:Audio Library C++ for a multicross platform use (iphone, android...) 【发布时间】:2011-09-16 06:02:43 【问题描述】:我正在尝试制作一个可以读取 mp3 文件的 C++ 引擎,并根据读取声音文件的时间进行一些图像缩放/翻译。我想我可以使用 OpenGL ES 来渲染我想要的东西,并在我的 C++ 文件中调用一些 OpenGL ES 指令,并在 Obj-C/Java 中初始化我的绘图上下文。我想对声音做同样的事情,但我真的不知道该使用什么,以及我是否真的可以在 C++ 中做到这一点。
我搜索了 library,所以我找到了 Bass 和 Fmod(这不是免费用于商业用途的)。他们说它是多跨平台(Windows、Unix、MacOS),但我不明白它是否适合移动设备,以及我是否真的可以使用它。有人经历过吗?你向我推荐另一个免费图书馆吗?
再次感谢,我为我糟糕的英语道歉,
阿诺
【问题讨论】:
【参考方案1】:看看 libpd(嵌入式应用程序的纯数据)
http://download.puredata.info/libpd(库最近才发布,但代码确实很成熟)
http://createdigitalmusic.com/2010/10/libpd-put-pure-data-in-your-app-on-an-iphone-or-android-and-everywhere-free/
【讨论】:
【参考方案2】:音频经常会出现问题,编写自己的高级 API 以完全按照您的意愿(仅此而已)并假设您将在它之间编写一个薄层几乎总是一个好主意以及您在下面使用的任何音频库。如果你很幸运并且有一个可用的库可以按照你的方式做事,那么这就是微不足道的。如果没有,至少它仍然是可能的。无论哪种情况,您的应用代码都不会绑定到外部声音 API。
多年来,我在 PC、Mac 和 iPhone 的多个不同商业项目中使用了 FMOD,并且一直很喜欢它 - 但它不是免费的。我不知道 OpenAL 似乎总是有点:笨重?但是您只需要在编写 API 层时处理它,而您的应用代码永远不必看到它。
我很容易说“编写自己的 API”,因为我已经编写商业游戏 20 年了,所以知道我认为音频 API 应该是什么样子。如果您没有自己的想法,那么我建议您查看一个对您有意义的 3rd 方库,并从中获取您将使用的功能并编写自己的 API 来做一组除了调用它们什么都不做的函数。
由于您可以免费使用 OpenAL 和 FMOD 进行开发,因此您可以让您的 API 与两者一起使用,然后它很可能会与您可能遇到的任何其他东西一起使用。
【讨论】:
【参考方案3】:OpenAL 可能是您最好的选择。看看这个答案:Android OpenAL?
似乎可以在 Android 上编译 OpenAL。
【讨论】:
根据最近的经验,Symbian 上的 OpenAL 很痛苦,最终我们放弃了它。我意识到问题中没有直接提到这一点,但是对于跨平台库,请在使用 OpenAL 之前检查一下。【参考方案4】:如果您只是在寻找 PCM 音频输入/输出(而不是 MP3 解码),请尝试使用 PortAudio 或 RTAudio RtAudio or PortAudio, which one to use?
【讨论】:
以上是关于用于多跨平台使用的音频库 C++(iphone、android...)的主要内容,如果未能解决你的问题,请参考以下文章