2011-04-09 85 views
1

最近幾個月我一直在編寫音頻編輯器,最近一直在思考如何實現快速高效的編輯(剪切,複製,粘貼,修剪,靜音等)。雖然在這個主題上似乎並沒有太多可用的信息,但是......我知道Audacity使用了一個塊文件策略,其中樣本數據(以及該數據的摘要,用於有效波形繪圖)以固定大小的塊存儲在磁盤上。然而,其他什麼策略可能呢?關於文本編輯的數據結構有相當多的信息 - 許多文本(和十六進制)編輯器似乎使用片段鏈方法,很好地描述了here - 但是可以用於音頻編輯器嗎?音頻編輯器的數據結構

事先的任何想法,建議等 克里斯

回答

0

的經典問題爲編輯處理相對較大的文件非常感謝的是如何應對缺失和插入。文本編輯器顯然面臨這種情況,因爲通常用戶一次輸入一個字符。音頻編輯器通常不會「按樣本抽樣」插入,即用戶不會每次都以交互方式輸入一個樣本,但是您有一些剪切和粘貼操作。我將從一個表示開始,其中音頻文件由存儲在(二進制)搜索樹中的數據塊表示。通過將要插入的塊拆分爲兩個塊來插入工作,將插入的塊作爲第三塊添加,並更新樹。爲了使用戶能夠高效地響應用戶,您應該擁有一個後臺進程,對磁盤(或內存)中的表示進行碎片整理,然後對持有該塊的樹進行原子更新。這應該儘可能快地插入和刪除。許多其他音頻操作(效果,歸一化,混合)就地操作,並且不需要改變數據結構,但是例如對整個音頻樣本進行歸一化處理是同時對其進行碎片整理的好機會。如果音頻樣本很大,則可以將塊保留爲硬盤上的標準塊。我不相信大塊需要固定大小;它們可以是可變大小的,最好是1024×(2的冪)字節以使文件操作有效,但固定大小的策略可以更容易實現。

+0

非常感謝您的回覆,Antti。實際上,我一直在研究某種二叉搜索樹作爲可能的解決方案。似乎許多文本編輯採用這種策略(例如Abiword),但我仍然懷疑許多音頻編輯使用這種方法。我基本上試圖確定在這個領域裏最好的做法,在潛水之前。 – ChrisM 2011-04-10 17:22:47