我正在编写一个需要使用大型音频多样本的应用程序,通常大小约为 50 mb。一个文件包含大约 80 个单独的短录音,我的应用程序可以随时播放这些录音。出于这个原因,所有的音频数据都被加载到内存中以便快速访问。
但是,当加载其中一个文件时,可能需要几秒钟才能放入内存,这意味着我的程序如果暂时冻结。有什么好的方法可以避免这种情况发生?它必须与 Windows 和 OS X 兼容。它冻结在此:myMultiSampleClass->open();
必须执行大量动态内存分配并使用 ifstream 从文件中读取。
我想到了两种可能的选择:
打开文件并将其加载到另一个线程的内存中,这样我的应用程序进程就不会冻结。我已经研究了 Boost 库来做到这一点,但在我准备好实施之前需要做很多阅读。我需要做的就是在线程中调用 open() 函数,然后销毁线程。
想出一个方案来确保我不会在任何时候将整个文件加载到内存中,我只是动态加载可以这么说。问题是任何样本都可能随时被触发。我知道其他一些软件有这种系统,但我不确定它是如何工作的。这在很大程度上取决于个人计算机的规格,它可以在我的计算机上运行良好,但硬盘/内存速度较慢的人可能会得到非常糟糕的结果。我的一个想法是将每个音频记录的 x 个样本加载到内存中,然后如果我需要播放,开始播放已经存在的样本,同时将其余音频加载到内存中。
有什么想法或批评吗?提前致谢 :-)