Data structures 音频编辑器的数据结构

Data structures 音频编辑器的数据结构,data-structures,audio,editor,editing,Data Structures,Audio,Editor,Editing,在过去的几个月里,我一直在编写一个音频编辑器,最近我一直在思考如何实现快速高效的编辑(剪切、复制、粘贴、修剪、静音等)。这方面的信息似乎并不多,但是。。。例如,我知道Audacity使用块文件策略,其中样本数据(以及用于高效波形绘制的数据摘要)以固定大小的块存储在磁盘上。然而,还有什么其他的策略是可能的呢?关于文本编辑的数据结构有很多信息-许多文本(和十六进制)编辑器似乎使用了片段链方法,描述得很好-但是这对音频编辑器有用吗 非常感谢您的任何想法、建议等。 Chris编辑处理相对较大文件的经典问

在过去的几个月里,我一直在编写一个音频编辑器,最近我一直在思考如何实现快速高效的编辑(剪切、复制、粘贴、修剪、静音等)。这方面的信息似乎并不多,但是。。。例如,我知道Audacity使用块文件策略,其中样本数据(以及用于高效波形绘制的数据摘要)以固定大小的块存储在磁盘上。然而,还有什么其他的策略是可能的呢?关于文本编辑的数据结构有很多信息-许多文本(和十六进制)编辑器似乎使用了片段链方法,描述得很好-但是这对音频编辑器有用吗

非常感谢您的任何想法、建议等。
Chris

编辑处理相对较大文件的经典问题是如何处理删除和插入。文本编辑器显然面临这个问题,因为用户通常一次输入一个字符。音频编辑器通常不会执行“逐个样本”插入,即用户不会每次以交互方式输入一个样本,但您有一些剪切和粘贴操作。我将从一个表示开始,其中音频文件由存储在(二进制)搜索树中的数据块表示。Insert将要插入的块拆分为两个块,将插入的块添加为第三个块,并更新树。为了让这个过程高效且对用户有响应,您应该有一个后台进程,对磁盘(或内存)上的表示进行碎片整理,然后对包含块的树进行原子更新。这将使插入和删除尽可能快。许多其他音频操作(特效、规格化、混音)在适当的位置运行,不需要更改数据结构,但对整个音频样本进行规格化等操作是同时对其进行碎片整理的好机会。如果音频样本很大,您也可以将块保留在硬盘上,因为它也是标准的。我不认为块需要固定大小;它们可以是可变大小的,最好是1024 x(2的幂)字节,以提高文件操作的效率,但固定大小的策略更容易实现。

非常感谢您的回复,Antti。事实上,我一直在研究某种二叉搜索树作为一种可能的解决方案。似乎许多文本编辑器都采用了这种策略(例如Abiword),但我仍然怀疑许多音频编辑器是否使用这种方法。我基本上是想在潜水之前确定这个领域的“最佳实践”。