Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet

18 янв 2023 Ср Вчера сделал код сжатия музыки

Оказалось, это не так и сложно, если тщательно все продумать. Код получился очень даже небольшим, где-то на 200 строк всего лишь. Для сжатия я использовал код Хаффмана, который уже давно изучал, но никак не мог реализовать его в виде программы на C/C++ и вот у меня получилось это сделать. Вчера сделал на Си, а сегодня переписал на использование классов, поскольку это удобнее получается намного. Код, правда, еще не доделан и ему достаточно далеко до завершения. Нужно придумать как хранить файл.
Например, я могу формировать файл .wah, в котором будут следующие поля:
  • Частота дискретизации (1 байт)
  • Стартовый байт
  • 512 байт для воссоздания дерева Хаффмана
  • Весь оставшийся код
Хранить данные для дерева довольно просто. Первые 256 байт всегда будут указывать на родительский элемент 256 + n, где n=0..254 (родительских элементов может быть максимум 255), а код номер 255 будет означать, что этот символ пустой. Причем, кстати интересно, если указывать родителя, то в заданной таблице всегда будет левая и правая часть (0 и 1). Слева будет потомок 0, справа — потомок 1. Это очень важно, поскольку именно так кодируется дерево.
Для остальных 256 все точно так же, в том числе порядок потомков. Если к примеру, из диапазона первых 256 указывает на родителя 5, и из диапазона 512 тоже на родителя 5, то первый будет потомок ветки 0, второй — ветки 1. Таким образом, можно закодировать все дерево через 512 байт. Но это, конечно же, надо проверить. Надеюсь, у меня получится.
Да, еще вчера все же заказал книгу по FoxPro 2.0 с Озона. Хорошо бы, если она у меня была. Может, я даже ее частично прочту.
Теги: Алгоритмы