Buffering 从磁盘播放(长)音频文件的策略

Buffering 从磁盘播放(长)音频文件的策略,buffering,audio-player,Buffering,Audio Player,我想开始一个关于这个的话题。很多人都想知道如何在特定的环境下或使用特定的语言来实现这一点,但我想知道一般来说什么是最好的策略 我看到两种主要做法: 在缓冲区中加载文件的小数据块,如2048个样本。这似乎是最简单的,但它涉及到大量使用磁盘,所以我怀疑这不是最好的 将所有文件加载到一个大缓冲区中。更温和的硬盘,但需要大量的内存,如果你使用几个长文件。如果文件很长,或者有很多通道,我想索引变量可能会损坏。例如,如果它是一个16位整数,可能它无法到达文件的末尾,或者我是偏执狂 我在想混合的东西,比如:

我想开始一个关于这个的话题。很多人都想知道如何在特定的环境下或使用特定的语言来实现这一点,但我想知道一般来说什么是最好的策略

我看到两种主要做法:

在缓冲区中加载文件的小数据块,如2048个样本。这似乎是最简单的,但它涉及到大量使用磁盘,所以我怀疑这不是最好的

将所有文件加载到一个大缓冲区中。更温和的硬盘,但需要大量的内存,如果你使用几个长文件。如果文件很长,或者有很多通道,我想索引变量可能会损坏。例如,如果它是一个16位整数,可能它无法到达文件的末尾,或者我是偏执狂

我在想混合的东西,比如:

使用非常大的缓冲区而不加载整个文件

将文件以自定义格式存储在hardrive上,以优化的方式快速访问

那么,你觉得呢,你是如何处理这件事的?
我真的不在乎什么是最好的,我更想知道每种方法的优缺点。

回答我自己问题的一部分,关于混合解决方案的部分

Audacity使用自定义块文件格式进行存储和播放。它封装了比大约1Mb的回调缓冲区大的思想和自定义文件类型.aup的思想

块文件平衡了两种相互冲突的力量。我们可以在不过度复制的情况下插入和删除音频,在播放过程中,我们可以保证每次请求磁盘时都能获得相当大的音频块。块越小,获取相同数量音频数据的潜在磁盘请求就越多;块越大,插入和删除时的复制就越多。发件人:

据我所知,它最初是为了加快很长文件的编辑速度而设计的,例如在开始时插入数据,而不必在之后移动所有内容。 但是对于播放相对较短的音频数据<1小时,我想把所有内容都放在RAM中就可以了