c++ - 缓冲波形文件/样本管理

标签 c++ arrays audio buffer

简而言之:我想在堆中缓冲整个音频文件(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/

相关文章:

c++ - Nodejs C/C++ 会使用多个Core吗?

c++ - 对 operator delete 覆盖的工作方式感到困惑

javascript - 如何从数组中过滤特定属性并将其存储到变量中

html - 我不能禁止自动播放音频文件

android - 如何在 Android 上播放合成声音?

c++ - 是否可以在可变参数模板函数中扩展非可变参数?

c++ - C++中的ifstream和ofstream错误

c - 在结构中声明数组

java - 创建一个二维字符串数组 anArray[2][2]

c# - 使用 .net 多次异步播放 wav 文件