简而言之:我想在堆中缓冲整个音频文件(wave)。
所以基本上,我会为每个通道使用一个数组,包含最多10 min * 60 sec * 44100
个样本。 (我只是将长度限制在10分钟,必要时转换为44100个样本/秒。)
所以我必须使用两个长度为26460000
个元素的数组。关于大小,数组将包含16位整数,每个文件加起来大约100mbyte。 (应该允许应用程序一次打开4个文件,因此使用的内存总计大约400字节)
问题是,如果这可以在Windows(32位)系统上运行,或者我应该使用更动态的样本管理?我想有用的是切割缓冲区块(例如)1024个样本,所以我不必使用一个巨大的数组,而是一堆较小的数组。
如果这不是一个好主意,我怎样才能实现一个样本管理,可以处理突然跳转到文件中的特定位置或重复一些样本。 (因此,一个“简单”的圆形缓冲区会覆盖旧的/使用过的样本,但实际上并没有帮助......)
答案 0 :(得分:0)
即使在Win32上也没什么大不了的。请使用std::vector::reserve
,您事先知道有多少样本。