【发布时间】:2012-09-07 12:53:30
【问题描述】:
我用 C++ 开发跨平台音频编辑器,它以每秒 0...5 次的速度读取媒体文件(在播放模式下或在屏幕上重新绘制声音时)。该实现打开一个文件并在对该文件的所有读取操作之间保持打开描述符。
我认为即使打开文件也不禁止任何文件操作对用户更友好。我会允许用户在播放时删除该文件(如果他/她愿意)。在下一次尝试从该文件读取下一个块失败后,程序将停止播放。
在现代 Windows / Linux / Mac OS 系统上,open()/close() 操作成本高吗?
但是打开()/关闭()巨大的 MP3 文件会很困难,因为 MP3 的“seek()”可能很昂贵(在需要的块之前读取所有块的标题)。
【问题讨论】:
-
你试过测量自己吗?
-
当然,使用 MP3 您不需要读取所有标题 - 您可以查找文件中的特定偏移量,查找帧开始幻数,然后从那里播放?如果用户在播放时编辑文件,改变文件的大小,那么他们应该期望播放中至少有一个亮点,并且可能让播放器跳到曲调中的不同位置(如果他们已经切掉了开始,例如)。
-
另外:即使打开/查找/读取速度很慢,您也可以通过每秒不执行 5 次来缓解这种情况。缓冲尽可能多的数据,以提高文件访问速度。允许在播放期间修改文件对您来说很友好(例如,如果您在播放 MP3 文件时不能修改其 ID3 标签,这很烦人,因为那时您会发现它们是错误的),但您将拥有这样做需要付出一些代价。
标签: c++ audio mp3 usability wav