| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Проведите ликбез по бинарным файлам |
| Автор: V0fka 19.6.2013, 15:34 |
| Привет! Вот, например, есть описание бинарного файла в формата wave https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ . На второй картинке разбирается бинарный файл и рассказывается что есть что. Хочу это понимать. Непонятно, например: 1) Как программа, работающая с файлом, знает где что? Любые бинарные файла стандартизированы и программы, которые с ними работают знаюх их формат, знают с какого байта и какой длины определенная секция и побайтово считывают данные и обрабатывают? 2) Доходит программа до секции data, считывает какие-то буквы-цифры, как она по ним определяет где sample2, где sample 5, где правый канал, где левый канал? Темный лес для меня |
| Автор: Akina 19.6.2013, 16:19 |
| 1) Да. 2) Да. |
| Автор: V0fka 19.6.2013, 16:28 |
| Akina, ответ "да" на первый вопрос меня устраивет, спасибо! А вот на второй, честно говоря, что "да" - я не понял. |
| Автор: V0fka 20.6.2013, 09:38 | ||
Ясно, спасибо!
У меня с английским дела обстоят не очень хорошо, так что, к сожалению, я очень плохо понимаю, что рассказывается по приведенной вами ссылке. А на русском/украинском я спецификации не нашел. Поэтому не могли бы вы, как для танкистов, объяснить все же как из букво-цифр получается звук, видео? Меня не интересует конкретно видео, звук, хочу понять как это вообще порисходит для всего. |
| Автор: Pavia 20.6.2013, 12:59 |
| V0fka, Wave сложный формат. Он является контейнером, а внутренних форматов потоков десятки. 1) Без знания Английского языка сейчас никуда. 2) Английский может ты и наезжаешь, но рисунков достаточно для понимания. 3) Пример я могу привести вот только пользы будет никакой. Да и его легко нагуглить. http://microsin.net/programming/ARM/wav-decoding.html http://www.delphisources.ru/pages/sources/graph/2010-year/example-riff-wave.html http://habrahabr.ru/post/113611/ Вот только качество этих примеров оставляет желать лучшего. Формат сложный и надо много поддерживать. Лучше взять библиотеку библиотеку вот к примеру FFMPeg тем более она с исходным кодом. http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/wavdec.c;h=adf41ecd89963d31314dee7504b9fa7fe013a924;hb=HEAD |
| Автор: V0fka 20.6.2013, 20:55 |
Можно не на примере wav файла, можно на абсолютно любом. Хочу уловить суть. К wav я прицепился после того, как прочитал описание работы с ним. Сразу же всплыли в памяти моменты, когда я читал про описание других бинарных файлов, которые меня действительно интересуют, и тоже ничего не понимал. Вот захотел разобраться как оно вообще все в общем работает. Вот, например, как устроен dbf файл или файл данных SQL сервера. Сейчас я не спрашиваю конкретное описание этих форматов, мне интересно, как система примерно разбирает эти файлы и как понимает что внутри есть объект "таблица", который состоит из "строк" и "колонок", на пересечении которых есть ячейки с конкретными типами данных и сами данные. |
| Автор: Pavia 20.6.2013, 21:18 |
| V0fka, у вас непонимания, от того что вы даже и не пытались понять. Если бы вы пробовали, тогда бы у вас были конкретные вопросы. А никак система этим не занимается. Этим занимается конкретная программа. Она не понимает. В программу уже заложено знания что в файле есть таблица, что есть строки и столбцы. Заложен признак начала строки и конца. И при разборе файла выполняется свод правил который переводит данные из одного формата в другой. Из внешнего во внутренний. Вам вначале надо про структуры данных прочитать. Что касается БД. То тут дела иначе. Внутренний формат совпадает с внешним и разбора нет. Есть функции которые выполняют преобразования данных в файле. Есть такие функции как вставка строки, удаление, сравнение и тд. |
| Автор: V0fka 21.6.2013, 10:41 | ||||
Понимаете в чем дело, дело в том, что я не пробовал потому, что я даже не понимаю с какой стороны заходить. Не, ну теперь, конечно ряд моментов прояснился, в чем бесспорно есть и ваша заслуга!
Хорошо, программа знает где начинается, где заканчивается каждая строка и колонка и может определить ячейки. А как программа понимает, что, например (все ниже - это условно) 3f 53 aa 3c - это строка "Вася" d2 58 ac 8d - это число "1234" 65 c5 d9 ff - это вообще картинка Я могу предположить, что где-то в этом же бинарнике есть информация о том, что по такому-то адресу находится именно строка, по такому-то именно число, а по такому какой-то бинарник. Это так или я все же не в теме? Буду искать инфу. Добавлю ещё вопросик. Все сводится к тому, что любой бинарник состоит из простых типов: строка, число, булево. Причем и видео и звук - это физически набор букв и цифр, так же? Как, например, из звукового файла можно понять какой именно какой инструмент, с какой он громкостью играет, какую ноту и т.п. Этих же правил всех не опишешь нигде, т.к. я могу сам какой-то звук придумать записать его и все будет нормально. Как происходит эта магия? Pavia и хочу поблагодарить вас за ответы! |
| Автор: Pavia 21.6.2013, 18:31 | ||||||
Зависит от формата файла. К примеру мы можем сказать что с 0 по 3 байт это целое число. С 10 байта по 20 байт записана строка. А можем сказать и так что в 0 байте число обозначает что лежит в последующих картинка или строка. К примеру если в нулевом байте 0 то картинка если 1 то строка. Но обычно так. Есть расширение файла которое говорит что это файл нужного типа. Расширения не являются уникальным идентификатором формата файла. Поэтому ещё проверяют магическое число или строку которая находиться в начале файла. Тем самым вероятность неправильного определения становиться очень маленькой. Далее мы уже знаем что за формат файла. У картинке свой и у звука свой и тд.
К примеру Простые такие как Int, float, bool, char Сложные ASCIIZ строка, Pascal строки (String, wide string). Составные такие как запись, массив, объединение. Сложные это уже объекты, деревья, очередь, стек, граф.
Да, это техномагия. Звук это колебания воздуха. Колебания это движение возле некоторой точки. Есть микрофон он переводит механические колебания воздуха в колебания электрического сигнала. Вкратце про микрофон. Микрафон состоит из пластины которая под движением воздух колеблешься. Давление с пластины передаёться на пьезокристалл(я же сказал волшебство а вы и не верите), который под давлением изменяет потенциал. Провод снимает потенциал с кристалла. Тем самым на проводе создаётся колебательный электрический сигнал. Раньше эти колебания электрические колебания передавались на электромагнитную головку которая записывала на магнитной ленте сигнал. Сейчас сигнал оцифровывают. PCM - Pulse-code_modulation - импульсная кодовая модуляция. Это формат представления звуковых данных. В виде серии импульсов. Звук это колебания. Так вот колебания представляют собой изменение величины называемой амплитудой. Пластина в микрофоне колеблется относительно точки опоры величина изменения положения пластины относительно точки опоры x это и есть амплитуда. А электрический сигнал выдаваемый микрофоном пропорционален этой величине. Так вот если этот сигнал разбить во времени,на серию импульсов. Импульс определяет значение амплитуды на коротком участке времени. Так вот серия импульсов описывает колебания звука. Это и называется PCM. Так вот уровень амплитуды т.е. уровень импульса переводиться в число. Говорят что он квантуется или оцифровывается. Делает это такое устройство, как АЦП(Аналогово цифровой преобразователь) Так вот в Wav обычно храниться звук в виде PCM с 8 или 16 бит на отчет(Sample). Отчет - это одно измерение или одни импульс. Т.е в WAV храниться серия импульсов с оцифрованной амплитудой. Или в виде серии отчетов. Так можно представить любой звук. Как я уже сказал импульс имеет время. Так вот в секунде мы можем сделать разное число импульсов. Т.е мы можем писать с разной частотой дискретизации. А есть ещё ЦАП- цифровой аналоговый преобразователь. Который выполняет обратное преобразование к АЦП. Он переходит из цифрового кода в аналоговый который по провода мы уже мы можем подвести к динамику. Который преобразуя электрический сигнал в механический колебания породит звук. |
| Автор: volatile 21.6.2013, 18:41 | ||
Никаких общих правил нет. Есть такое понятие как "спецификация файла" Это, простым языком, правила где и что расположено в файле. Спецификация - это документ, на каждый тип файлов он свой. На какой-то тип файла, (ну например WAV) Спецификация может быть окрыта. На другой тип, спецификация закрыта. (проприетарные форматы, многие форматы MS например, ялвяюцца закрытыми.) На открытые типы вы можете поискать спецификацию в сети. Но там без знания инглиша, и главное без неслабого знания компа, и предмета приложения, делать нечего. |
| Автор: V0fka 25.6.2013, 09:25 |
| Pavia, большое спасибо за очень развернутый последний ответ и за все предыдущие! Благодаря вам, я более-менее получил понятие о том, как "все устроено". volatile, и вам премного благодарен за ответ! |