iPhone上最适合音效的格式是什么?

14

在iPhone或iTouch上存储和播放短暂(2-3秒)音效的推荐音频格式是什么?

iPhone音频SDK文档显示,iPhone支持多种音频格式,但每种格式都有其缺点:

  • MP3:这是一种高度压缩但质量也很高的编码格式,可保留音乐和说话声的丰富性。然而,在iPhone上只能同时播放单个mp3流,因为它需要使用硬件解码器。这排除了mp3作为声音效果的格式,因为它们会打断背景音乐和/或任何用户正在播放的音乐。
  • WAV:如果WAV文件是PCM编码并且不需要任何压缩编解码器,则iPhone仅支持WAV文件。虽然WAV支持许多不同的采样率和位深度,但它会产生非常大的文件(16位/ 44.1kHz / 立体声音频每秒180k)。当您需要快速播放许多效果时,文件大小变得不可行。
  • AIFF:与WAV文件存在类似的问题-不清楚是否支持任何压缩编解码器。据说支持Apple Lossless压缩-但我找不到任何可以使用此压缩生成AIFF的工具。
  • 自定义:您可以使用iPhone低级别API从任何源播放自己的音频。但这似乎对于在游戏中播放简单的声音效果来说过于复杂。我肯定不想为此编写自己的音频层和编码器/解码器。

如果有人能推荐一个价格合理的音频处理工具,可以生成推荐的格式,将不胜感激...

5个回答

11

您可以使用IMA4压缩文件,从WAV文件提供1:4的压缩比,并通过硬件解压(可以使用AVAudioPlayer加载它们)。

至于MP3,您只能同时播放一个该格式的文件,因此不建议用于需要同时播放多个声音效果的情况。

我在OpenAL中使用IMA4文件,因此我正在使用基于这篇文章的代码手动解压它们。


1
不想打击你的积极性,但同时播放多个mp3文件非常容易。只需使用多个AVAudio Player实例即可。 - Jackie Treehorn
2
至少在我回答时,情况并非如此。AVAudioPlayer 仅允许同时播放单个 MP3 文件,而辅助播放会出现显着的延迟和掉帧。我猜想这种情况仍然存在,特别是对于需要精确控制声音开始时间的游戏来说。 - pgb

2

我在使用CAF格式文件方面运气还不错,虽然WAV的大小也很接近。

至于工具,Audacity是免费且功能合理的。我主要使用Amadeus Pro(约40美元)。它相当不错,并生成所有iPhone支持的音频格式(包括MP3、AIFF、WAVE、AAC和CAF)。一个不错的特点是它支持AudioUnit和VST插件,所以你可以添加SoundFX。

我也听说过Fission(由Rogue Amoeba开发),但实际上没有使用过。他们的其他音频产品也非常可靠。

AVAudioPlayer框架在播放短片段方面表现得相当不错,但如果可以节省内存,您可能希望预加载声音(调用prepareToPlay)并保留它们。


我原以为CAF只是一种容器格式,可以包含MP3、IMA4、AIFF等任何格式。我错了吗? - mahboudz
CAF文件可以包含其他类型的文件格式作为块,但它们有自己的64位头、元数据和轨道布局。您仍需要一个转换工具,可以导入其他类型并写入CAF。这是规范:http://devworld.apple.com/documentation/MusicAudio/Reference/CAFSpec/CAF_overview/CAF_overview.html - Ramin

1
在您的Mac上查看afconvert命令行实用程序。它可以在不同的音频格式之间进行许多转换,如果您有很多声音,可以脚本化转换...
我主要使用SoundToolbox和AVAudioPlayer,声音大多是在GarageBand中创建的未压缩线性PCM。
对于播放短小的“boing”、“click”或其他触发播放的声音,您不关心停止或干扰其音量等,SoundToolbox非常棒。
如果您想停止正在播放的声音或知道声音是否完成播放,则AVAudioToolbox很好。如果您想以控制声音左右两个组件的方式播放声音,则请查看OpenAL。
如果您还没有阅读过苹果公司的iPhone应用程序编程指南中关于声音支持的内容,请先阅读一下。
如果声音对您的应用程序很重要,您可能希望利用一些可用的功能,只需进行很少的工作即可。

0

我唯一能够使用的格式是CAF。这也是苹果代码示例中最常见的格式。如果您正在使用短音效,则大小不会成为问题。


0
我一直在使用微软ADPCM WAV格式,它可以将音频压缩比从3.25:1(高质量)到3.98:1(默认质量)。 此外,我会根据声音的需要降低采样率至32000或22050。 对于某些文件来说,单声道也能很好地减小文件大小,因此无需保存为立体声。 而对于背景音乐,mp3格式就足够了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接