SKAudioNode音量调整推迟

时间:2018-01-22 13:09:23

标签: objective-c sprite-kit volume skaudionode

我正在开发一款SKAudioNode播放游戏音乐的游戏。当玩家开始新游戏时,我希望音乐淡入,所以我写了下面的代码:

SKAudioNode *SFXNode = [[SKAudioNode alloc] initWithfile:@"GameMusic.mp3"];
[SFXNode runAction:[SKAction changeVolumeTo:0 duration:0]];
SFXNode.positional = NO;
[self addChild:SFXNode];
[SFXNode runAction:[SKAction changeVolumeTo:1 duration:1]];

但是,当场景启动时,音乐以全音量播放一瞬间,然后它会按预期静音并淡入。有谁知道为什么会这样? (音乐仅在用户触发到场景的模态segue之后,但在屏幕上显示之前音量仅为满音量。一旦显示场景,音乐就会正常淡入)。此外,音乐似乎确实是位置的:当玩家在场景中移动时,音量会发生变化,我不想发生这种情况。解决这些问题中的任何一个都非常受欢迎。谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为音频发送到音频缓冲区后会发生音量变化。您需要在更新发生之前重置卷。现在,您无法在创建音频后立即执行此操作,您需要在将其添加到AudioEngine后执行此操作,因此我建议您在场景移动到视图时执行此操作(在{{1}中)功能)。

实际更改音量的代码应该类似于

didMoveToView但我建议先检查((AVAudioMixerNode *)SFXNode.avAudioNode).volume = 0是否存在且是否符合avAudioNode协议