TEXHO 14 Жалоба Опубликовано 14 июля, 2016 Содержание: 1. Краткая структура WAV-файла; 2. Обработка дискретной информации; 3. Поиск дампов; 4. Декодирование. Теория; Структура WAV-файла (Windows PCM). Звуковой файл можно четко разделить на две части. В первой части хранится информация о заголовке файла, во второй части хранятся непосредственно звуковые данные. В заголовке хранится информация о размере файла, о количестве каналов(моно, стерео и т.д.), о частоте дискретизации и пр. Звуковые данные хранятся в виде дискрет. Для извлечения дискрет есть программа WAV-TXT, которая входит в известный экселевский пакет по декоду. В первом скриншоте показан пример аудиофайла с реальным дампом открытого в программе Cool Edit pro Во втором скриншоте показан пример аудиофайла с приближением. На данном скриншоте можно увидеть точки. Каждая точка это и есть дискрета, из которой построен данный график. Code: 55, 58, 63, 65, 69, 73, 76, 79, 82, 85, 88, 90, 92, 93, 93, 93, 91, 86, 8072, 63, 52, 38, 27, 15, 6, 0, 1, 4, 14, 26, 44, 62, 81,101,120,136,151165,176,187,196,205,213,220,226,231,234,235,234,233,229,225,221,216,211,206202,196,193,190,186,182,179,177,174,172,170,167,165,165,164,166,168,172,177185,195,205,216,227,238,246,252,255,254,249,240,227,211,192,172,151,131,11094, 79, 66, 56, 50, 44, 42, 39, 37, 37, 36, 35, 35, 35, 35, 35, 36, 36, 3839, 41, 45, 47, 53, 57, 63, 68, 74, 78, 82, 86, 88, 89, 91, 92, 93, 93, 9290, 86, 80, 72, 62, 50, 37, 27, 18, 13, 12, 16, 25, 40, 58, 78, 99,121,139158,173,187,198,209,218,228,235,242,246,249,250,249,249,248,245,244,246,247 Здесь показан пример дискрет, взятых из реального аудиофайла. Обработка дискретной информации. Перед процессом декодирования необходимо подготовить данные для более удобной обработки. Подготовка данных будет состоять из нескольких этапов: 1. Узнать размер аудиоданных из заголовочной информации аудиофайла и, при большом размере, необходимо выполнить поэтапную загрузку в память ПК, т.е. разбить аудиоданные на несколько частей. Вычислить необходимое количество частей можно по формуле: ChankSize - общий размер аудиоданных buf - размер аудиоданных, который ПК сможет загрузить для дальнейшей обработки part - количество разбиваемых частей part = ChankSize / buf После этого необходимо отбросить дробную часть и мы получим нужное количество частей. 2. Определить минимальный и максимальный порог фонового шума для дальнейшего его отбрасывания при процессе декодирования и автоматического поиска дампов. [ПСЕВДОКОД] MIN = 255 MAX = 0 ЦИКЛ i от 0 до buf ЕСЛИ MIN > data ТОГДА MIN=data ЕСЛИ MAX < data ТОГДА MAX=data [/ПСЕВДОКОД] 3. Выполить поэтапную загрузку в память [ПСЕВДОКОД] Переменные: ChankSize - общий размер аудиоданных buf - размер аудиоданных, который ПК сможет загрузить для дальнейшей обработки PART - количество разбиваемых частей ЕСЛИ buf > ChankSize ТОГДА (загрузить все данные) В ПРОТИВНОМ СЛУЧАЕ (циклично загрузить данные PART раз) [/ПСЕВДОКОД] Поиск дампов. При поиске дампов необходимо учитывать несколько важных параметров: минимальный и максимальный порог фонового шума, минимальная длина найденных данных(дампа), минимальная длина пустых данных(фонового шума), счетчик фонового шума, счетчик найденных данных. [ПСЕВДОКОД] Переменные: ChankSize - общий размер аудиоданных buf - размер аудиоданных, который ПК сможет загрузить для дальнейшей обработки PART - количество разбиваемых частей MIN,MAX - пороги фонового шума data - данные count - счетчик фонового шума countdump - счетчик найденных данных lengthdump - минимальная длина дампа ЦИКЛ i от 0 до PART ЕСЛИ (data > min) и (data < max) ТОГДА count = count + 1 В ПРОТИВНОМ СЛУЧАЕ count = 0 ЕСЛИ count < 300 ТОГДА countdump = countdump + 1 ЕСЛИ countdump > lengthdump ТОГДА (копируем найденные данные в новую переменную для дальнейшего декодирования) [/ПСЕВДОКОД] Декодирование. Теория. Процесс декодирования отлично описан в экселевской документации(у кого нет могу дать ссылки на скачивание) и подробно описывать его нет смысла. Вкратце декод состоит из трех этапов: - определение тайминга; - определение бит; - декодирование битовой(двоичной) информации. Тайминг - это количество дискрет за один полупериод. Для более подробного понимания тайминга на картинке показан полупериод, полный период, показаны нули и единицы. Т.е. из этого следует, что полупериод нуля в два раза больше полупериода единицы. Если сложить два полупериода единицы, тогда получим примерный полупериод нуля. Процесс определения бит из таймингов очень прост. Нам необходимо вычислить ноль - это (как мы выяснили выше) число, примерно в два раза больше полупериода единицы. Если следующее число после нуля в два раза меньше, то и следующее число после меньшего должно равняться приблизительно такому же значению. (пиздец путаница, сам бы нихрена не понял если бы читал) Можно вычислять биты по-другому. Необходимо вычислить длину нуля и "двигаться" вперед по графику приблизительно с таким же промежутком. Эта длина показана на графике синими точками. Если между этими точками был полупериод, значит это ноль, если был полный период значит единица. Так же в начале и в конце дампа идут синхронизирующие нули, которые никак не относятся к дампу, а служат только лишь для вычисления длины полупериода или полного периода (показана синими точками). Если будут вопросы, относительно вычисления тайминга и бит расскажу более подробно. После получения бит остается сделать декодирование по графику. По данному принципу работает мое автоматизированное ПО для декода. В целом все. Если аудитория проявит интерес, то готов более подробно углубиться в каждый из этапов автоматического декодирования с реальными примерами исходников. Отвечу на все ваши вопросы в данном топике. 2015 darknet © sergdb Поделиться сообщением Ссылка на сообщение