Структуры данных для аудио редактора - PullRequest
1 голос
/ 09 апреля 2011

Я пишу аудиоредактор последние пару месяцев и недавно думал о том, как реализовать быстрое и эффективное редактирование (вырезание, копирование, вставка, обрезка, отключение звука и т. Д.). Похоже, что на самом деле не так много информации по этой теме ... Я знаю, что Audacity, например, использует стратегию файловых блоков, в которой выборочные данные (и сводные данные этих данных используются для эффективного сигнала). чертеж) хранится на диске в виде фрагментов фиксированного размера. Какие другие стратегии могут быть возможны, однако? Существует довольно много информации о структурах данных для редактирования текста - многие текстовые (и шестнадцатеричные) редакторы, похоже, используют метод кусочковидной цепочки, хорошо описанный здесь - но может ли это, или что-то подобное, работать для аудио редактора?

Большое спасибо заранее за любые мысли, предложения и т. Д. Chris

1 Ответ

0 голосов
/ 10 апреля 2011

классическая проблема для редакторов, обрабатывающих относительно большие файлы, состоит в том, как справиться с удалением и вставкой. Текстовые редакторы, очевидно, сталкиваются с этим, так как обычно пользователь вводит символы по одному. Аудиоредакторы обычно не выполняют вставки «семпл за семплом», то есть пользователь не вводит один семпл за один раз в интерактивном режиме, но у вас есть несколько операций вырезания и вставки. Я бы начал с представления, где аудиофайл представлен кусками данных, которые хранятся в (двоичном) дереве поиска. Вставка работает путем разделения фрагмента, который вы вставляете, на два фрагмента, добавления вставленного фрагмента в качестве третьего и обновления дерева. Чтобы сделать это эффективным и отзывчивым для пользователя, у вас должен быть фоновый процесс, который дефрагментирует представление на диске (или в памяти), а затем выполняет атомарное обновление дерева, содержащего фрагменты. Это должно сделать вставки и удаления как можно быстрее. Многие другие аудио операции (эффекты, нормализация, микширование) работают на месте и не требуют изменений в структуре данных, но делают, например, Нормализация всего аудиосэмпла - это хорошая возможность одновременно дефрагментировать его. Если аудиосэмплы велики, вы можете сохранить фрагменты, так как это стандартно для жесткого диска. Я не верю, что куски должны быть фиксированного размера; они могут иметь переменный размер, предпочтительно 1024 x (степень двух) байтов, чтобы сделать файловые операции эффективными, но стратегию фиксированного размера легче реализовать.

...