简而言之:我想在堆中缓冲整个音频文件(wave)。
所以基本上,我会为每个 channel 使用一个数组,包含最多 10 min * 60 sec * 44100
样本。 (我只是将长度限制为 10 分钟,并在必要时转换为 44100 个样本/秒。)
所以我必须使用两个数组,最大长度为 26460000
个元素。关于大小,数组将包含 16 位整数,每个文件总计约 100 兆字节。 (应允许应用程序一次打开 4 个文件,因此使用的内存加起来将达到 ~400 兆字节)
问题是,这是否适用于 Windows(32 位)系统,或者我是否应该改用更动态的样本管理?我想有什么帮助是削减(例如)1024 个样本的缓冲区 int block ,这样我就不必使用一个巨大的数组,而是使用一堆较小的数组。
如果这不是一个好主意,我如何实现一个样本管理来处理突然跳转到文件中的特定位置或重复一些样本。 (因此,覆盖旧的/使用过的样本的“简单”循环缓冲区真的无济于事......)
最佳答案
即使在 Win32 上也没什么大不了的。请使用 std::vector::reserve
,您预先知道有多少样本。
关于c++ - 缓冲波形文件/样本管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26361240/