【问题标题】:Sprite Kit: Why does playing sound return error?Sprite Kit:为什么播放声音返回错误?
【发布时间】:2017-01-24 21:13:28
【问题描述】:

我昨天将我的 Sprite Kit 游戏升级到 X-Code 8.0 和 Swift 3。部署目标当前设置为 iOS 9.3。

我播放音效的方式如下:

self.run(SKAction.playSoundFileNamed("click.caf", waitForCompletion: false))

音效播放不正确(只有大约一半的样本)并且我收到以下错误(自升级到 X-Code 8.0 和 Swift 3):

SKAction: Error playing sound resource

有什么想法吗?

【问题讨论】:

  • 我看到了完全相同的问题。我打算在这里写一篇文章。我尝试播放这样的 wav [SKAction playSoundFileNamed:@"throw.wav" waitForCompletion:NO]。它以前在 Xcode7/iOS9 上工作过。
  • 在 ~50 次失败后,它突然开始工作了。你也一样?
  • @Fredrik Johansson:如果问题仍然存在,请告诉我,我会向 Apple 报告。
  • 我的错误报告被关闭为“重复”,但重复的错误仍然是“打开”。我无法检查重复的描述,因为我没有报告它......除此之外,Apple 没有一个字:(
  • 我的错误报告 (28350796) 现已修复,并且我已在 iOS 10.2 的 beta 模拟器中对其进行了验证。因此,如果您的问题在 iOS 10.2 上仍然存在,请添加新的错误报告!

标签: ios audio sprite-kit skaction


【解决方案1】:

当我删除此预加载代码时,问题消失了。你有类似的东西吗?但是现在我第一次播放声音时会出现短暂的延迟。不知道该怎么处理。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Preload sounds
  [SKAction playSoundFileNamed:@"coinBlip.wav" waitForCompletion:NO];
  [SKAction playSoundFileNamed:@"bonus.wav" waitForCompletion:NO];
  :

我的错误报告 (28350796) 现已修复,我已在 测试版模拟器中的 iOS 10.2。因此,如果您有问题,请添加新的错误报告 在 iOS 10.2 上仍然存在!

【讨论】:

  • 它又出现了。但频率要低得多。会不会是同时加载两个声音触发了问题?
  • 是的,我已经删除了预加载代码。到目前为止工作正常,没有延迟......
  • 我使用的是 *.caf 格式,与未压缩的 *.wav 格式相比,它要小得多。也许这会触发延迟?
  • 我改成了.caf,现在没有延迟了。真的不知道为什么。这些文件的大小大致相同,但 afinfo 告诉我 caf 已优化,而 wav 则没有。可能就是这样。谢谢salocinx!
  • 好吧,是的,据我所知 *.caf 代表 CoreAudioFormat。似乎以某种方式针对 Apple 设备及其音频框架进行了优化...
【解决方案2】:

我找到了适合我的解决方案。我使用计算的 SKAction 声音属性而不是预加载的声音:

var enemyCollisionSound: SKAction { return SKAction.playSoundFileNamed("hitCatLady.wav", waitForCompletion: false) }

【讨论】:

    【解决方案3】:

    我也遇到了这个问题,我已经追踪到如果一个节点正在尝试播放声音并且它在其代码中创建了另一个对象的实例并且该对象已经预加载了音频代码,该节点创建的另一个不会播放它的声音。

    【讨论】:

      【解决方案4】:

      遇到同样的问题,第一次播放某些声音时出现错误“SKAction:播放声音资源错误”,我发现将声音的 SKAction 分配给“didMoveToView”中的空变量完全解决了我的问题。

      以正常最简单的方式声明声音动作:

      let waterDropSoundAction = SKAction.playSoundFileNamed("WaterDrop.caf", waitForCompletion: false)
      

      然后在 didMoveToView 中加载声音动作而不实际播放:

      let _ = waterDropSoundAction
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-31
        • 1970-01-01
        • 2022-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        相关资源
        最近更新 更多