【问题标题】:iOS - Multiple apps using FMOD - audio only works in the first app to be runiOS - 使用 FMOD 的多个应用程序 - 音频仅适用于要运行的第一个应用程序
【发布时间】:2012-05-28 11:16:44
【问题描述】:

我正在开发一个不是我开发的现有应用,它使用 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。”

第二个似乎是因为初始化失败。

【问题讨论】:

    标签: objective-c ios fmod


    【解决方案1】:

    这是通过 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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多