Введение
Намедни попал в нашу лабораторию довольно любопытный заказ. Профессиональный диктофон ZOOM H6 Handy Recorder. Устройство и носитель в рабочем состоянии, проблема носитель, на котором находились данные (карта памяти SDHC на 32 Гбайт) был отформатирован в фотоаппарате. Вопрос о том, каким образом флешка из диктофона попала в фотоаппарат, оставим для истории нам ответ на него не интересен. Интересно восстановить записанные звуковые данные.
Форматирование разделов FAT32 это всегда потеря файловых записей; процесс сопровождается их заменой чистыми. С одной стороны, это удобно, так как в структурах FAT32 не остается никаких рудиментов файловых записей. С другой это крайне губительно для данных, так как в случае фрагментации файлов и необходимости их восстановить, простое RAW-сканирование становится недостаточным, на выходе получаются поврежденные или неработающие файлы.
Не исключение и наш заказ. Попытки отсканировать карту памяти имеющимся ПО (Data Extractor, R-Studio, R.Explorer) структуру папок обнаружить не смогли. При черновом восстановлении аудиопотока (wav-файлы) получаются работающие файлы, но с перемешанным содержимым то есть продолжительность звуковой дорожки верная, файл проигрывается, но звук идет кусками то из одной дорожки, то из другой.
Владелец устройства сообщил, что запись велась на два микрофона в формате интервью, то есть аудиопоток должен быть идентичным, но громкость голосов в каждой записи разной.
Поврежденный аудиофайл. Явно заметно, что области громкого звука и тихого звука имеют примерно одинаковую продолжительность и резкие, обрывающиеся, границы
Тот же аудиофайл после исправления.
ТТХ устройства
Начинаем, как водится, со знакомства с устройством. Идем на сайт производителя, и вдумчиво читаем, что там про него пишут. Особенно нам интересны поддерживаемые форматы файлов и количество независимых микрофонов. Устройство поддерживает подключение до 4 микрофонов и, соответственно, одновременную запись с них. Максимально может записываться одновременно 8 дорожек (оно и понятно: стерео с 4 микрофонов). С форматами файлов все тоже понятно. Ассортимент не велик, форматы широко распространенные, никаких своих форматов нет. И это хорошо.
Форматы аудиофайлов, поддерживаемые рекордером
Вся нужная информация найдена. Начинаем работать. Для восстановления информации нам нужно ответить последовательно на следующие вопросы: какой формат записи использовался в нашем случае, как расположены данные на карте памяти, и что надо сделать для того, чтобы файлы заработали правильно?
1. Какой использовался формат записи?
Ответ на этот вопрос находится в заголовке аудиофайла:
Тут все просто, в пояснениях не нуждается. Поехали дальше.
2. Как расположены данные на карте памяти?
Здесь и дальше используем WinHex.
Находим первый заголовок аудиопотока (берем пример заголовка из результатов предварительного RAW-восстановления). Выглядит он примерно так:
В каждом файле есть таймштамп:
Поиск тех аудиоданных, которые нам нужны, лучше вести не по заголовкам файлов (их могут оказаться, и оказалось в нашем случае, многие сотни), а по таймштампам.
Производим поиск от начала до первого таймштампа нужной нам аудиозаписи. Обозначаем начало сектора с таймштампом как начало блока. Теперь производим поиск последнего таймштампа нужной нам аудиозаписи (ищем, соответственно, с конца). Дальше нам нужно найти окончание данных, относящихся к нужной нам записи. Это просто: ищем следующий за последним таймштампом заголовок нового аудиопотока. На всякий случай нужно убедиться, что он не относится к тому, что мы ищем: смотрим в сектор, видим там другой таймштамп. Отлично. Последний байт перед найденным заголовком отмечаем как конец блока.
Теперь у нас имеется выделенная область, содержащая данные нужного нам аудиопотока:
Копируем эту область в новый файл. Так, во-первых, удобнее работать. А во-вторых, другие-то данные нам не нужны зачем нам их восстанавливать?
Дальше работаем с полученным файлом.
Из формата файла: WAV, 44k, mono. То есть при записи с двух микрофонов мы имеем дело с двумя звуковыми дорожками.
Разбиваем файл на фрагменты по количеству таймштампов. Получаем четное количество фрагментов со следующими параметрами:
Фрагмент 1 32 кбайт;
Фрагмент 2 кратно 32 кбайт;
Заголовки фрагментов 1 и 2 идентичны.
Фрагмент 3 32 кбайт;
Фрагмент 4 кратно 32 кбайт;
Заголовки фрагментов 3 и 4 идентичны.
И так далее, все имеющиеся аудиопотоки (восстановить требовалось 10).
После несложных вычислений:
1) Аудиопоток фрагментирован;
2) Размер фрагментов составляет 32 кбайт;
3) Фрагменты чередуются в порядке: четные относятся к первой дорожке, нечетные ко второй.
Структура аудиопотока, записанного с двух микрофонов рекордером ZOOM H6 Handy recorder
3. Пора собирать аудиофайлы
Очевидно, что после того, как мы узнали, каким образом ZOOM H6 handy recorder пишет данные, собрать их в нормально проигрываемые аудиофайлы не составило никакого труда и заняло несколько минут машинного времени:
1) Разбиваем весь выделенный аудиопоток на куски по 32 кбайт; мы использовали File Splitter & Cutter;
2) Четные куски отправляем в одну папку, нечетные в другую; использовался Total Commander, выделение по маске (кнопка "+" на цифровой клавиатуре) *.*1; *.*3; *.*5; *.*7; *.*9;
3) Переименовываем файлы в обеих папках так, чтобы их расширения представляли собой номера по порядку; снова Total Commander, групповое переименование и выбираем в расширении счетчик, а в параметрах счетчика не менее 5 цифр (так как фрагментов будет много);
4) Объединяем файлы по порядку в каждой из папок; опять же, удобен Total Commander;
5) Переименовываем результат в *.wav и наслаждаемся результатом =).
А что насчет других форматов файлов и другого количества микрофонов?
Конечно, это был интересный вопрос. И мы не преминули воспользоваться возможностью это проверить. Использовали три микрофона (больше просто не было в наличии), формат записи MP3, битрейт самый низкий и самый высокий из возможных.
Результат абсолютно идентичен предыдущему, с той лишь разницей, что в начале аудиопотока не два куска с заголовками, а три. Размер блока при записи те же 32 кбайт. Расположение кусков также по порядку:
Собрать файлы можно также, без напряжения, используя общеизвестный софт; единственное, что распределять куски по 32 кбайт придется по трем папкам. Делаем это с использованием скрипта для Total Commander. Ну а дальше групповое переименование, сборка и результат.
Заключение
Радует, когда производитель не заморачивается сложными собственными форматами данных, нагромождением алгоритмов их записи и тому подобной мутью, в разы увеличивающей необходимое на восстановление информации время.