【问题标题】:Exception thrown when loading sound- but things work anyway加载声音时抛出异常 - 但无论如何都可以正常工作
【发布时间】:2016-05-10 18:34:06
【问题描述】:

我有以下几行来在一个声音存储单例中预加载几个(短)声音(然后可以在需要播放时从中抓取)

_successSound = [SKAction playSoundFileNamed:@"success2.wav" waitForCompletion:NO];
_failureSound = [SKAction playSoundFileNamed:@"failure2.mp3" waitForCompletion:NO];

当我使用异常断点(我经常这样做)运行我的应用程序时,它会在第二行中断。删除断点,一切都按预期工作。我之前只在要播放声音时才进行此“加载”(这导致第一次播放时速度变慢),并且从未引起任何异常。

编辑:还应该补充一点,如果我将 failure2 声音更改为我的声音文件夹中的其他声音,也没有任何例外 - 也许这与它是 mp3 有关?

【问题讨论】:

    标签: objective-c xcode sprite-kit


    【解决方案1】:

    操作系统代码可能会抛出被捕获且对外部永远不可见的异常,如果您在异常上设置断点但无需担心且无需避免任何事情,只要没有未捕获的异常,就会很不方便.

    在 C++ 中实现的 API 经常发生这种情况 - 抛出和捕获异常在 C++ 中更为常见。

    【讨论】:

      【解决方案2】:

      好的,所以我通过将mp3 转换为wav 来消除异常。如果有人知道为什么这是一个问题,我会很感兴趣。

      【讨论】:

      • SKAction documentation 表示playSoundFileNamed 仅用于短的附带声音,通常仅作为未压缩的 WAV 或 CAF 分发(类似的东西可以在系统短声音 API 中看到)。它说 AVAudioPlayer(确实支持 MP3 以及其他压缩的有损格式)应该用于播放更长时间的背景音乐。
      • 这不是一个确定的答案,只是我的猜测。
      • mp3 只需约 2 秒,但似乎最合理的答案是对 mp3 格式的支持存在一些问题。
      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2021-02-21
      • 1970-01-01
      • 2018-02-11
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多