这是一个更通用的 RTFM DSP 问题,来自对音频制作和软件非常熟悉的人,但对于音频软件开发来说是新的,关于未压缩(wav、caf、aiff)文件(44.1 采样率,16 位)之间的大小差异磁盘,与此音频在内存中的实际浮点值。
例如,我有一个测试 WAV 文件,根据 MacOS,它为 7 分 14 秒 (7:14),大小为 83.4 MB。
如果我将此文件导入我的项目并将文件AKAudioFile作为.floatChannelData.大约 2300 万个浮点数,堆上大约 180 兆字节。这是有道理的,因为FloatSwift 中的标准对象是一个 32 位浮点数,每个浮点数 8 个字节。
我了解它的大小,但是我希望至少在我的应用程序中能够使用更接近 16 位的东西,我只是在分析这个音频,而不是以任何方式处理它,即使经过一些基本的优化并防止深度复制,任何超过 10 分钟左右的音频都会占用堆上的内存。
根据这个SO question,有一些将 32 位转换为 16 位的新颖方法,但老实说,这对于我想要做的事情来说感觉像是错误/矫枉过正的方法。举个例子,如果我只是简单地从我的引用 它会自动向堆中添加大约 300 兆!即使没有复制,附加等......floatChannelDataAKAudioFile
对于更有经验的 DSP 音频开发人员,是否有任何资源可用于对程序中的大浮点数进行良好的堆/堆栈管理?AudioKit 可以将内容录制到 16 位吗?我目前正在使用 C 和 C++ 进行处理,所以如果它具有更高的性能,我觉得在那里进行任何类型的数学或转换都很舒服。任何线索都非常感激,谢谢!