7

我们有一款游戏即将发布,但我们有一个非常烦人的问题。在我们的 Beta 测试者手机中,他听不到任何游戏音效。但是,他可以很好地听到背景音乐和标题屏幕音乐。

背景音乐和标题音乐都通过 AVAudioPlayer 播放(它们更长,我们需要循环和音量控制等)。声音效果只是通过 AudioServicesPlaySystemSound 播放(它们很短,我们不需要精确控制或知道它们何时结束等)。这适用于大多数 iPhone,但不适用于这一款。所有这些都是通过 AVAudioSessionCategorySoloAmbient 的音频会话播放的。

所以我有两个问题: - 首先,这是一个可以接受的实现吗?即有没有我错过的东西说你不能混合这两个框架,或者混合它们是一个坏主意的原因?- 第二,有没有人见过这样的东西?如果是这样,您是否找到解决方法?

附加背景说明:我可以肯定地说,在他的手机上,这是两个框架的混合。他能够听到声音,直到我们添加标题屏幕音乐的大致相同的构建。此外,如果我将其中一个声音更改为通过 AVAudioPlayer 工作,他能够听到它。不幸的是,我不能简单地将声音移动到 AVAudioPlayers 中,因为它根本性能不佳,我需要更好的同步。

4

2 回答 2

9

编辑 2
我已经确定了错误的原因。两种不同的音频框架在两种不同的音量设置上播放。有主音量(当您进入应用程序时显示的内容,并且没有标题)和铃声音量(当您在主屏幕上没有加载任何应用程序时显示的内容)。AVAudioPlayer 使用主音量设置调用播放。由于我已将类别设置为 AVAudioSessionCategorySoloAmbient(请参见下面的代码),因此如果您在应用程序内使用音量摇杆,则会调整音量控制。然而,SystemSounds 以振铃音量播放。这不会出现在应用程序中,因此不允许用户在游戏期间调整他们的设置。

很容易看出用户可能会感到困惑:假设他们将铃声设置为低,甚至关闭。他们开始玩游戏。他们听到标题屏幕音乐(AVAudioPlayer)并且能够调高或调低音量并且它正常响应。然后他们开始游戏并播放音效(SystemSounds),但由于铃声音量低/关闭,他们什么也听不到。为了听到声音效果,他们提高了音量,背景音乐也做出了相应的反应。所以从这个角度来看,声音效果看起来肯定是没有播放。

如果您有类似的情况,请让您的用户在玩游戏之前确保他们的铃声音量已调高,并且他们的静音开关已打开(即未静音)。您还可以通过自己进行测试来验证所有这些 - 降低铃声音量并提高应用内音量。您的 SystemSounds 应该退出组合。

原始答案:在重新挖掘所有文档时,我找到了答案。我没有正确激活音频会话。以前我只有这个代码来设置类别:

NSError *setCategoryError = nil; 
BOOL    categoryWasSet    = [[AVAudioSession sharedInstance] 
                              setCategory: AVAudioSessionCategorySoloAmbient 
                              error: &setCategoryError]; 

但我还需要添加以下代码来显式激活音频会话:

NSError *activationError  = nil;
BOOL    activationSuccess = [[AVAudioSession sharedInstance]
                              setActive: YES 
                              error: &activationError];

我已经用这个用户重新测试过,它已经完全解决了这个问题。希望对可能遇到类似问题的人有所帮助。

编辑:这似乎并没有解决这个问题。我从我的测试人员那里得到了一个误报,当更详细地检查时,他似乎实际上并没有听到 SystemSound 产生的声音。

于 2009-11-02T17:21:05.627 回答
8

我在应用商店中有两个应用混合了这两个框架。AVAudioPlayer 用于需要启动和停止以及音量控制的声音,而 AudioServices 工具箱则用于发出短促的哔哔声和点击声。我能想到的唯一想法是,AVAudioPlayer 的音量似乎与 AudioServices 声音分开控制。因此,请检查以确保测试仪没有关闭声音(使用振动模式开关)或音量调低。

如果这没有帮助,请告诉我更多关于您的声音/代码的信息,我可以在我的应用程序中添加一些代码,看看我是否可以获得相同的行为。当然,听起来您的大多数测试人员都没有这个问题,我可能也不会看到它。

于 2009-11-02T04:14:37.573 回答