AudioKit / DSP:了解磁盘上和内存中未压缩音频的大小之间的差异

问题描述 投票:1回答:1

这是一个更通用的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 ++进行处理,因此如果可以提高性能,可以在其中进行任何形式的数学或转换,我感到非常自在。任何潜在客户都很感激,谢谢!

ios swift audio signal-processing audiokit
1个回答
4
投票
AudioKit使用各种第三方的DSP例程,这些例程需要32位浮点数组格式的数据。当以某些方式引用这些数组或以某些方式将其作为参数传递时,Swift会制作Swift数组的副本。因此,如果您将基本的Swift编码技术与常见的AudioKit API结合使用,则可能会占用大量内存。

另一种选择是不将AudioKit API与标准Swift数组一起使用,而仅根据需要将数据转换为32位。

© www.soinside.com 2019 - 2024. All rights reserved.