objective-c - iOS - 使用 FMOD 的多个应用程序 - 音频仅适用于要运行的第一个应用程序

标签 objective-c ios fmod

我正在开发一个我没有开发的现有应用程序,它使用 FMOD 播放其音频。

从外观上看,该应用程序的早期版本被编写为使用 AVAudioPlayer,并且有构建选项可以使用。

不过,最新版本使用 FMOD,因为许多功能仅在使用 FMOD 版本构建时才包含在内。

当我首先使用现有应用程序之一,然后尝试运行我正在开发的这个新应用程序时,问题就出现了。

如果我运行一个应用程序,然后将其留在后台并运行第二个应用程序,则第二个应用程序中的声音根本不会播放。我可以回到第一个应用程序并毫无问题地播放声音。如果我杀死这两个应用程序,然后先启动另一个应用程序,那么它会完美运行。

如果我使用 AVAudioPlayer 选项构建应用程序,那么我不会遇到这个问题,而且为 FMOD 版本编写的所有功能都不存在。因此,我可以证明它与 FMOD 有关,但无法弄清楚是什么。

编辑:
做了更多的挖掘,我得到了两个 FMOD 错误:

首先,当我运行时:result = fmodSystem->init(4, FMOD_INIT_NORMAL | FMOD_INIT_ENABLE_PROFILE, NULL);我收到错误 51 -“发生套接字错误。这是其他地方未列出的与套接字相关的错误的全部内容。”

其次,当我运行时:result = fmodSystem->createSound((const char *)[audioData bytes], FMOD_SOFTWARE | FMOD_OPENMEMORY, &exinfo, &fmodSound);我收到错误 79 -“此命令失败,因为未调用 System::init 或 System::setDriver。”

第二个似乎是因为 init 失败了。

最佳答案

这是通过 Twitter 回答的,因此我会自己将答案放在这里,但是,如果 Stuart 想自己在这里回答,那么我会投票作为答案。

答案是禁用:FMOD_INIT_ENABLE_PROFILE,因为它一次只能在一个应用程序中运行:

因此,这:result = fmodSystem->init(4, FMOD_INIT_NORMAL | FMOD_INIT_ENABLE_PROFILE, NULL);
应该变成这样:result = fmodSystem->init(4, FMOD_INIT_NORMAL, NULL);

关于objective-c - iOS - 使用 FMOD 的多个应用程序 - 音频仅适用于要运行的第一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783779/

相关文章:

iphone - connectionWithRequest 是同步的吗?

C 定义我的 fmod 回调

c++ - 我如何使用 fmod( float )检查 - 并获得余数?

iphone - FMOD 和简单的 If 语句

ios - Coreplot 图缩放问题

ios - 显示和滚动比屏幕长的 UIImageView(图像)

ios - 为什么在 iOS 10 中添加 "__NSSingleXXXI"私有(private)类

ios - 使用其他三个 View Controller 设置 UITabBarController

ios - 如何在头文件 (.h) 中创建一个不可变的只读属性,在实现 (.m) 中创建一个可变的读写属性

ios - 如何读取一个IOS App项目