如何处理成千上万的小音频文件



需要实现一个具有播放声音功能的应用程序。每个声音都会是一些单词的声音,预期的声音数量大约是一千个。因此,最简单的解决方案是将这些声音存储为声音文件,每个单词的声音都存储在单独的声音文件中,并根据需要播放。这么多文件会有什么潜在的问题吗?

这么多文件没有问题,但它们占用的空间将超过其大小的总和。每个文件将填满设备上的整个#空间块。平均而言,除非所有文件都明显小于一个块,否则您将浪费半个块(根据经验),在这种情况下,您将始终使用1.000个块(一个pr.文件)并浪费1000*(块大小-平均文件大小)。

你可以做的事情:

将文件连接到一个大文件中,存储每个子文件的开始和长度,将块读取到内存中或复制到临时文件中。

将数据库中的文件作为BLOB字段删除,以便于检索。这不会节省空间,但可能会使代码更简单或更可靠。

我认为您不需要创建自己的缓存机制。最有可能的是,iOS有一个系统范围的缓存,可以做得更好。只有当您遇到性能问题并且需要更短的加载时间时,这才是相关的。在这种情况下,可能会考虑使用bolcks来加载和调度播放,因为这是隐藏加载延迟和避免UI冻结的更简单方法。

如果您的音频未压缩,应用商店将报告压缩后的大小。如果这与未包装的尺寸有很大不同,一些(挑剔的)客户肯定会注意到ald的抱怨,因为他们认为广告中的尺寸就是安装尺寸。我从个人经历中知道。他们通常不会把技术性的答案当作答案,任何答案都可能绕过与你的交谈,并基于此否决你。我不是你。

您应该可以在IPA中存储1000个音频剪辑文件,但注意空间要求和组织非常重要。

另外需要考虑的是,访问磁盘的速度比内存慢,而且还占用电池空间,因此将最常用的音频片段加载到内存中是理想的选择。

如果你负担得起,可以使用FMOD,我相信它可以从各种压缩方案中提取音频。如果你只想自己处理所有这些文件,请创建一个.zip文件,并使用libz(iOS库libs.dylib)动态提取它们。

最新更新