在简单的 iOS 游戏中音频的最佳方法是啥?

Posted

技术标签:

【中文标题】在简单的 iOS 游戏中音频的最佳方法是啥?【英文标题】: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 视频中有关它的讨论所示,它非常适合游戏。 【参考方案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." 我会在我的回答中加上一个“也许”,所以这不是一个笼统的陈述!

以上是关于在简单的 iOS 游戏中音频的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从音频文件中获取图像的最佳方法是啥?

为 OS X 和 Windows 创建既是音频单元又是 VST 的音频插件 UI 的“最佳”方法是啥?

iOS 音频系列之一:Core Audio简介

iOS:如何将音频数据从客户端流式传输到服务器?

在 UWP 中在后台播放音频的最简单方法是啥?

使用 C# 从 RTMP 服务器获取和播放音频流的最简单方法是啥?