【问题标题】:What is the best approach for audio in a simple iOS game?在简单的 iOS 游戏中音频的最佳方法是什么?
【发布时间】:2015-01-15 01:46:06
【问题描述】:

我是 Objective-C 的新手,对处理基本音频的正确方法感到非常困惑。我完成了一个简单的游戏,但几天来一直在与声音问题作斗争。

这是我的理解:

AVAudioPlayer:似乎非常适合播放较长的声音,例如覆盖游戏的主题音乐。

AudioServicesPlaySystemSound:似乎非常适合快速音效,不到 30 秒。

我自然会继续认为我会使用 AVAudioPlayer 来制作主题音乐,而 SystemSound 来制作我的音效。不幸的是,我立即注意到一个非常烦人的问题 - 两者由不同的音量源控制(SystemSoundServices 使用铃声音量??)并且通常不能很好地配合使用。这不是大多数应用程序使用的设置。

然后我放弃了 AudioServicesPlaySystemSound 方法并重新编程了 AVAudioPlayer 中的所有内容。这对音量效果很好,但会导致严重的延迟并且无法处理快速的声音序列。这似乎对音效没有用处。

我现在正在研究 OpenAL,这对于我的简单游戏来说似乎是严重的矫枉过正。那么有人可以告诉我 - 我是否遗漏了什么或者 OpenAL 是处理这种常见音乐/sfx 游戏格式的最佳方式?

【问题讨论】:

  • "重新编程了 AVAudioPlayer 中的所有内容。这对音量效果很好,但会导致严重的延迟并且无法处理快速的声音序列" 那么你做错了。展示你是如何做到的。
  • 对了,新的AVAudioEngine呢???正如 WWDC 2014 视频中有关它的讨论所示,它非常适合游戏。

标签: objective-c audio avaudioplayer openal


【解决方案1】:

如果您在使用 AVAudioPlayer 时“有延迟”,那么您可能做错了。

但是,无论如何,我建议您考虑使用 AVAudioEngine。它的目的正是让你做 OpenAL 所做的事情,但使用更简单的编程接口。它非常适合简单的游戏及其音效。 AVAudioEngine 上的 WWDC 2014 视频显示它正是用于此目的。

【讨论】:

  • 谢谢。我想我一定是错误地实现了 AVAudioPlayer,因为它会滞后。只要我知道它能够顺利运行一系列快速的音效,我就会回去再试一次,或者我会检查 AVAudioEngine。
  • 只是为了跟进这一点,我仍然会因为快速触摸而明显滞后,而且我开始认为这不仅仅是我。见this link"There's still some pretty noticeable latency when using AVAudioPlayer; it might be OK for simple sound effects, but there's always OpenAL for more precise and timely playback."
  • 我会在我的回答中加上一个“也许”,所以这不是一个笼统的陈述!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2018-08-14
相关资源
最近更新 更多