我正在开发一个我没有开发的现有应用,它使用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失败了。
答案 0 :(得分:3)
这是通过Twitter回答的,因此我会在这里给出答案,但是,如果斯图尔特想在这里自己回答,那么我会将其作为答案投票。
答案是禁用:FMOD_INIT_ENABLE_PROFILE,因为它一次只能在一个应用程序中运行:
因此,这个:
result = fmodSystem->init(4, FMOD_INIT_NORMAL | FMOD_INIT_ENABLE_PROFILE, NULL);
应该成为这个:
result = fmodSystem->init(4, FMOD_INIT_NORMAL, NULL);