SKAudioNode 音量调整延迟

SKAudioNode volume adjustment delayed

我正在开发一个 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]];

但是,当场景开始时,音乐会以最大音量播放一秒钟,然后静音并按预期淡入。有谁知道为什么会这样? (音乐仅在用户触发场景模式转场之后、但在屏幕上显示之前才以全音量播放。场景一显示,音乐就会正常淡入)。此外,音乐似乎确实是位置性的:当玩家在场景中四处移动时,音量会发生变化,这是我不希望发生的。非常感谢解决这些问题中的任何一个。谢谢!

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

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

((AVAudioMixerNode *)SFXNode.avAudioNode).volume = 0 但我建议首先检查 avAudioNode 是否存在,并且它确实符合 AVAudioMixerNode 协议