这是一个更通用的RTFM DSP问题,来自对音频制作和软件非常熟悉的人,但是对于未压缩(wav,caf,aiff)文件之间的大小差异(44.1采样率,16位),这是音频软件开发的新手。 ),而不是此音频在内存中的实际浮动值。
例如,根据MacOS,我有一个测试WAV文件,该文件为7分14秒(7:14),大小为83.4 MB。
[如果我将此文件导入到我的项目中并以AKAudioFile
的形式打开文件,然后检查.floatChannelData
属性(它是两个数组的数组,每个通道一个(立体声文件的两个标准)),该文件尤其是总计约2300万个浮点数,堆上约180兆字节。这很有意义,因为Swift中的标准Float
对象是32位浮点数,每个浮点数8个字节。
我了解大小,但是我希望至少能够在我的应用程序中使用接近16位的东西,我只是分析音频,不以任何方式对其进行处理,甚至经过一些基本的优化并防止出现深度失真。复制,任何超过10分钟左右的音频都会占用堆上的大量内存。
据此SO question,有一些新颖的方法可以将32bit转换为16,但是老实说,这感觉像是我想做的错误/过度杀伤的方法。举例来说,如果我只是从floatChannelData
中仅reference AKAudioFile
,它就会自动向堆中添加大约300兆!即使没有复制,添加等...
对于那些经验丰富的DSP音频开发人员,是否有资源可以对程序中的大浮点数进行良好的堆/堆栈管理? AudioKit可以将内容录制到16位吗?我目前正在用C和C ++进行处理,因此如果可以提高性能,可以在其中进行任何形式的数学或转换,我感到非常自在。任何潜在客户都很感激,谢谢!
另一种选择是不将AudioKit API与标准Swift数组一起使用,而仅根据需要将数据转换为32位。