我想在此开始一个帖子。很多人都想知道如何在特定环境或特定语言中做到这一点,但我想知道什么是一般的最佳策略
我看到两个主要做法:
在缓冲区中加载文件的小块(如2048个样本)。这似乎是最直接的,但它涉及使用磁盘的批次,所以我怀疑它不是最好的。
将所有文件加载到大缓冲区中。对于硬盘驱动器更温和,但如果使用多个长文件则需要大量内存。如果你的文件很长,或者有很多频道,我想这个索引变量可能会被破坏。例如,如果它是一个16位整数,它可能无法到达文件的末尾(或者我是偏执狂吗?)
我正在考虑混合的东西,比如:
使用非常大的缓冲区而不加载整个文件
将文件以自定义格式存储在硬盘驱动器上,以便为快速访问它进行优化。
那么,你怎么看,你怎么处理这个? 我真的不在乎什么是“最好的”,我更加疑惑每个人的利弊。
答案 0 :(得分:0)
回答我自己问题的一部分(关于混合解决方案的部分)。
Audacity正在使用自定义BlockFiles格式进行存储和播放。它封装了大约1Mb的大(-ger比回调)缓冲区和自定义文件类型(.aup)的想法。
“BlockFiles平衡两个相互冲突的力量。我们可以插入和删除音频而无需过多的复制,并且在播放过程中我们可以保证每次请求到磁盘时都会获得相当大的音频块。块越小,潜在的磁盘请求越多获取相同数量的音频数据;块越大,插入和删除的复制就越多。“ (来自:http://www.aosabook.org/en/audacity.html)
根据我的阅读,它主要用于加速非常长文件的编辑(例如,在开始时插入数据而不必移动所有内容)。 但是为了播放相对较短的音频数据(<1小时),我想把所有东西都放在RAM里就好了。