gpt4 book ai didi

iphone - AudioServicesPlaySystemSound 和 AVAudioPlayer 可以混用吗?

转载 作者:太空狗 更新时间:2023-10-30 03:35:26 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

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

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

但我还需要添加以下代码来显式激活 Audio Session :

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

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

编辑: 这似乎并没有解决问题。我从我的测试人员那里得到了误报,经过更详细的检查,我发现他似乎并没有真正听到 SystemSound 生成的声音。

关于iphone - AudioServicesPlaySystemSound 和 AVAudioPlayer 可以混用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1659167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com