好吧,每个人都知道(我的意思是很多超级用户)各种多媒体应用程序都需要将一部分媒体文件读入内存,并在处理后为用户播放该部分。例如,当您想使用 WMP 播放 mp3 文件时,它首先从硬盘读取一块数据,然后播放该部分,如果您在播放期间检查 WMP 的磁盘 I/O 活动(使用 Process Hacker 或 Process Explorer,或者只是任务管理器),您会注意到,根据文件的比特率,WMP 会不断从硬盘读取数据。
现在我的问题是:这里有没有人知道任何媒体播放器或音乐播放器应用程序,它们不会直接从硬盘读取 mp3 文件,而是将整个文件加载到内存中并从那里播放(这有点像我的旧便携式 CD 播放器为节省能源所做的事情。我曾以这种方式测试过:我插入一张磁盘,然后让它认为(愚蠢的小机器:)门是关闭的,这样它就可以播放磁盘(我对激光装置很小心),然后我按下播放按钮,我可以看到里面发生了什么:它开始旋转我的 CD,直到找到第一个曲目,然后它再次旋转约 45 秒,直到将整个 mp3 歌曲加载到其内存中(它是日本制造的,我大约 13 年前花了很多钱买的,所以它有一个巨大的内存,有时我想找到内存芯片组并将其用于我的电子项目,但我就是不能损坏它),当整首歌曲都在内存中时,引擎的电源被切断,但 CD 仍在旋转,这样,它会对电池进行一点充电(根据手册),当歌曲即将结束(大约10秒结束)时,它会再次启动引擎,并根据程序(如果有)转到下一首曲目,并且这会一直持续到磁盘或程序或电池结束或耗尽。
我知道这对于内存较低的 PC 上的超大视频文件来说并不实用,比如尝试使用此技术播放 8GB 的电影,但我确信这对于小于 50MB 甚至 200MB 的 mp3 文件来说不是问题。另外,我们不应该忘记我们可以分割文件,例如应用程序将文件的 5MB 读入内存,播放它,然后再处理接下来的 5MB。
那么,是否有适用于 Windows 的应用程序可以将整首歌曲(媒体文件)加载到内存中?或者是否有办法编写这样的程序?
非常感谢您抽出时间和回答。您无法想象如果您能帮助我,我会多么感激您。
答案1
Winamp 的 Nullsoft MPEG 音频解码器允许用户控制文件缓冲,我将其设置为 16MiB,这样会在播放之前将几乎每个文件直接加载到 RAM 中。
事实上,大多数媒体播放器都有一定量的预缓冲和一定的读取速率,读取速率可能是硬编码的(比如一次 128KiB)或基于文件的平均比特率而变化。
一些媒体播放器可能也会使用其“网络缓冲”设置进行本地内容缓冲,确定的最佳方法是增加缓冲区并加载文件,看看读取行为是否发生变化。
答案2
我认为设置(此处描述)http://forums.winamp.com/showthread.php?t=182563)作为首选项>插件>输入> Nullsoft MPEG 音频解码器>完整文件缓冲可以做到这一点(Winamp 5.622)