如何将 OGG 与 SDL_Mixer 一起使用?

How do I use OGG with SDL_Mixer?

我似乎无法 SDL_Mixer 在启用 OGG 支持的情况下进行初始化。我知道我必须 link 与 libogg、libvorbis 和 libvorbisfile 但它仍然不起作用。我有这三个库的 .dylibs、.frameworks 和 .as,我都试过了。

我正在将 dylibs/frameworks 复制到构建阶段选项卡中应用程序包的 Frameworks 文件夹中。

我在构建设置选项卡中将 Runpath Search Paths 设置为 @executable_path/../Frameworks

但是Mix_Init(MIX_INIT_OGG)一直返回错误OGG support not available

我正在使用所有提到的库的最新 Homebrew 版本。我不确定还能尝试什么。

我有一个完整的游戏,有 300MB 的 wav 音乐。

更新

我已经设法将一些 Objective C 与 C++ 混合并使用 AVAudioPlayer 播放一些声音,但这是可怕的代码。我必须转换为 void * 以确保我的音乐播放器 class 与我的 C++ 代码库兼容。垃圾收集器太烦人了。它所做的只是妨碍你。你必须用桥梁演员来对抗它。

我真的很想使用 SDL_Mixer 或一个简单的 C 库。

我完全实现了 Objective C 音乐播放器,但我受不了 Objective C。我找到了一个很棒的库,叫做 stb_vorbis. I’ve used a few of the other stb libraries,所以我知道这个库会很棒。从这个库中播放音频数据实际上非常简单。我真正需要做的就是在 SDL2 的音频回调中调用 stb_vorbis_get_samples_short_interleaved。我不需要做任何混音,因为我只需要播放音乐。实现是如此简单,以至于我第一次 运行 它实际上完美地工作了!这是因为 stb_vorbis 和 SDL2 都是 C 库,所以它们才有意义(不像 Objective C 应该被烧毁)。

TL;DR

如果您只想播放音乐而不能使用 SDL_Mixer 或不想使用 SDL_Mixer,那么您可以只从 stb_vorbis into SDL2’s audio callback 提供数据。