gpt4 book ai didi

c++ - 将大型多样本音频文件加载到内存中进行播放 - 如何避免临时卡住

转载 作者:太空狗 更新时间:2023-10-29 23:10:07 30 4
gpt4 key购买 nike

我正在编写一个需要使用大型音频多样本的应用程序,通常大小约为 50 MB。一个文件包含大约 80 个单独的短录音,我的应用程序可以随时播放这些录音。出于这个原因,所有音频数据都被加载到内存中以便快速访问。

但是,当加载其中一个文件时,可能需要很多秒才能放入内存,这意味着我的程序暂时卡住了。避免这种情况发生的好方法是什么?它必须与 Windows 和 OS X 兼容。它卡住在这个:myMultiSampleClass->open(); 必须使用 ifstream 进行大量动态内存分配和从文件中读取。

我想到了两种可能的选择:

  1. 打开文件并在另一个线程中将其加载到内存中,这样我的应用程序进程就不会卡住。我已经查看了 Boost 库来执行此操作,但在我准备好实现之前需要进行大量阅读。我需要做的就是在线程中调用 open() 函数,然后销毁线程。

  2. 想出一个方案来确保我不会在任何时候将整个文件加载到内存中,可以这么说,我只是即时加载。问题是任何样本都可能随时被触发。我知道其他一些软件也有这种系统,但我不确定它是如何工作的。这在很大程度上取决于个人电脑的规范,它在我的电脑上可能运行良好,但硬盘/内存较慢的人可能会得到非常糟糕的结果。我的一个想法是将每个录音的 x 个样本加载到内存中,然后如果我需要播放,则开始播放已经存在的样本,同时将其余音频加载到内存中。

有什么想法或批评吗?提前致谢:-)

最佳答案

使用 memory mapped file .加载时间最初是“即时的”,I/O 的开销会随着时间分散。

关于c++ - 将大型多样本音频文件加载到内存中进行播放 - 如何避免临时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2373094/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com