Утилита-распаковщик звуковых файлов автомобильных ГУ

Вчера ко мне обратился один человек, который при помощи написанной мной несколько лет назад консольной программы scan пытался научить ГУ автомобиля разговаривать по-русски. Потратив некоторое время, я написал программу для распаковки и сборки обратно звукового файла из прошивки ГУ.

Сначала немного о самой программе Scan. Страшно подумать, она написана уже больше 10 лет назад! Эта консольная утилита умеет находить в составных файлах-контейнерах и извлекать внедренные в них файлы, находя их положение, размер и некоторые прочие характеристики по специфическим маркерам-идентификаторам, распознавая большое количество популярных в то время форматов файлов.

Обратившийся ко мне человек при помощи Scan обнаружил в файле-контейнере из прошивки для ГУ автомобиля KIA Sorento множество звуковых wav-файлов голосовых команд, и показал мне для этот файл. Имея многолетний опыт в распознавании формата и структуры файла “на глаз” (большая часть форматов в Scan была добавлена не по документации а на основе реверс-инженеринга доступных файлов), мне не составило труда определить структуру файлов прошивки, чуть больше времени ушло на написание программы для распаковки и обратной сборки. Формат у них такой:

Два файла – PROMPT.INDEX и PROMPT.CONTENTS. В *.INDEX-файле, как несложно догадаться находятся имена и индексы (смещения) звуковых файлов, которые хранятся в *.CONTENTS-файле, где просто следуют один за другим без всяких разделителей. Структура индексного файла такова: он состоит из 40-байтных записей, каждая из которых имеет следующую структуру:

  • байты 00..31 – дополненный в конце нулями идентификатор файла, например 5778, 9872, BEEP или EXIT.
  • байты 32..35 – DWORD смещение положения данных от начала *.CONTENTS-файла. Интеловский little-endian порядок байтов.
  • байты 36..39 – DWORD длина порции данных (и соответственно размер wav-файла)

*.INDEX-файл полностью состоит из таких записей от начала до конца без каких-либо заголовков или контроля целостности (соответственно, размер его кратен 40 байтам).

Имея эти данные, написать программу было делом техники. Вот так выглядит её окно:

Интерфейс программы-распаковщика

Интерфейс программы-распаковщика

В качестве исходных данных указываем путь до *.CONTENTS– и *.INDEX-файлов, и путь до папки с распакованными файлами. При нажатии на кнопку “Распаковать” все содержимое контейнера распаковывается в указанную папку, а идентификаторы преобразуются в имена файлов добавлением расширения wav. При нажатии на кнопку “Запаковать”, как можно догадаться, процесс обратный – составляется список *.wav-файлов в указанной папке, сортируется, и из них собираются индексный и *.CONTENTS-файлы.

Так как программа писалась на скорую руку, есть некоторые ограничения – подразумевается что размер единичного wav-файла такой, что он может целиком поместиться в оперативную память компьютера. Вероятно, имеются и какие-либо ошибки, которые я мог не заметить. Какая же ранняя версия программы без ошибок? 😉

Скачать распаковщик можно здесь: unpacker.exe (прямая ссылка, 51 Кб, под Windows).

Если есть вопросы, дополнения или просьбы – пишите в комментариях. Даже если эта программа просто вам пригодилась – отпишитесь, я буду знать, что делал её не зря.

Share

Михаил Соколов

Автор - Соколов Михаил Борисович, город Киров. Эколог, работаю в химической лаборатории областного природоохранного центра. Фото и видео, если не указано иное, сняты мною. При использовании фото в интернете обязательно указание авторства и активной ссылки на этот сайт. Условия использования в печатной продукции можете узнать, связавшись со мной одним из способов, указанных в разделе »Контакты». Для некоммерческих и бесплатных проектов обычно разрешаю безвозмездное использование фото.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *