1

我正在开发一个应用程序,它将播放跨越几个八度音阶的 12 音全音阶的音符。这基本上是一个临时的波表合成器。

乘以使用的仪器数量。

笔记存储为 .wav 文件,并将缓存到 RAM 中,以防止硬盘检索产生的开销。但是,在物理内存方面存在重大的时空折衷,因为 .wav 文件可能非常大。

有谁知道如何使缓存这些 .wav 文件更节省空间?压缩是一个不错的选择,但太多会降低质量。即时调制或扭曲频率肯定会太迟钝。如果我错了,请纠正我,但是用这个实现播放 200 BPM 是行不通的。

如果您有使用音乐应用程序的经验,请分享您的建议。

4

2 回答 2

1

本身没有音乐应用程序的经验,但我使用过音频,包括录音。

在 iPhone 上,由于磁盘大小和速度的限制,您通常不会将整个音频加载到 RAM 中。使用 AudioQueue API,您编写一个从磁盘填充缓冲区的回调函数(通常使用 AudioFile 方法)。您可以适当地选择缓冲区大小和缓冲区计数,以保持应用程序的音频播放平稳运行。

您可能还应该检查压缩的可能性;像无损 AAC 这样的东西应该可以让您在不损失质量的情况下减少 50% 的文件大小,但代价是处理开销显着增加。

真的,听起来你在这里过早地尝试优化。编写一些实验代码,看看是否可以从音频播放例程的标准文件加载样式中获得 200BPM。由于解码时间的原因,使用 WAV 的文件加载方式实际上可能比压缩和使用 RAM 更快。

于 2009-07-23T20:13:17.070 回答
1

您应该使用 IMA4 压缩将 .wav 文件压缩为 caf 文件(核心音频格式)。iPhone 可以同时播放多个这些文件(MP3/AAC 不能,因为你需要硬件解码器)..

您可以在 Mac OS X 上使用以下终端命令将 WAV 转换为 CAF:

$ afconvert -f caff -c 1 -d ima4 loop1.wav

此外,如果您使用 AVAudioPlayer (AVFoundation) 播放这些内容,则不必担心缓存,因为 AVAudioPlayer 已经这样做了。对于更高级的音频,您需要查看音频服务(音频队列)。

于 2009-12-17T11:58:23.843 回答