【问题标题】:SKAudioNode volume adjustment delayedSKAudioNode 音量调整延迟
【发布时间】:2018-07-01 03:05:47
【问题描述】:

我正在开发一款游戏,其中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]];

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

【问题讨论】:

    标签: objective-c sprite-kit volume skaudionode


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是在这种情况下强制转换类型必须是一个指针 - 我建议进行编辑。
    • 知道为什么音频是定位的吗?
    • 是的,我很久以前就停止使用 ObjC 并切换到 Swift,所以我不必担心愚蠢的指针标记哈哈。至于位置音频,这是您必须使用的设置。我不怎么处理 SKAudioNode,所以我建议查看文档。
    • 我还必须将 AVKit 框架包含到我的项目中才能正常工作。哈哈,我可能也应该切换到 swift,这听起来容易多了
    • 我也有同样的问题。我希望我可以使用相同的解决方案,但我的 node.avAudioNode 不是 AVAudioMixerNode。我尝试明确添加 AVKit 和 AVFoundation 但没有运气。您还需要什么尚未提及的其他内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多