Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проведите ликбез по бинарным файлам 
:(
    Опции темы
V0fka
Дата 19.6.2013, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Привет!

Вот, например, есть описание бинарного файла в формата wave https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ . На второй картинке разбирается бинарный файл и рассказывается что есть что. Хочу это понимать. Непонятно, например:
1) Как программа, работающая с файлом, знает где что? Любые бинарные файла стандартизированы и программы, которые с ними работают знаюх их формат, знают с какого байта и какой длины определенная секция и побайтово считывают данные и обрабатывают?
2) Доходит программа до секции data, считывает какие-то буквы-цифры, как она по ним определяет где sample2, где sample 5, где правый канал, где левый канал?

Темный лес для меня smile 
PM MAIL   Вверх
Akina
Дата 19.6.2013, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



1) Да.
2) Да.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
V0fka
Дата 19.6.2013, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Akina, ответ "да" на первый вопрос меня устраивет, спасибо! А вот на второй, честно говоря, что "да" - я не понял.
PM MAIL   Вверх
Pavia
Дата 19.6.2013, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



1) 
Цитата(V0fka @  19.6.2013,  15:34 Найти цитируемый пост)
Как программа, работающая с файлом, знает где что?
 Это описывается в спецификации на файл и прочей документации. 
2)
Цитата(V0fka @  19.6.2013,  15:34 Найти цитируемый пост)
Доходит программа до секции data, считывает какие-то буквы-цифры, как она по ним определяет где sample2, где sample 5, где правый канал, где левый канал?

Согласно спецификации. 
http://www-mmsp.ece.mcgill.ca/Documents/Au.../WAVE/WAVE.html
Но обычно этим не пользуются. Есть библиотеке которые умеют читать разные файлы и приводить к единому интерфейсу.
PM MAIL   Вверх
V0fka
Дата 20.6.2013, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(Pavia @  19.6.2013,  17:30 Найти цитируемый пост)
Это описывается в спецификации на файл и прочей документации. 

Ясно, спасибо!

Цитата(Pavia @  19.6.2013,  17:30 Найти цитируемый пост)
Согласно спецификации. 
http://www-mmsp.ece.mcgill.ca/Documents/Au.../WAVE/WAVE.html
Но обычно этим не пользуются. Есть библиотеке которые умеют читать разные файлы и приводить к единому интерфейсу.

У меня с английским дела обстоят не очень хорошо, так что, к сожалению, я очень плохо понимаю, что рассказывается по приведенной вами ссылке. А на русском/украинском я спецификации не нашел. Поэтому не могли бы вы, как для танкистов, объяснить все же как из букво-цифр получается звук, видео? Меня не интересует конкретно видео, звук, хочу понять как это вообще порисходит для всего. smile 

Это сообщение отредактировал(а) V0fka - 20.6.2013, 09:40
PM MAIL   Вверх
Pavia
Дата 20.6.2013, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



V0fka, 
Wave сложный формат. Он является контейнером, а внутренних форматов потоков десятки.

1) Без знания Английского языка сейчас никуда.
2) Английский может ты и наезжаешь, но рисунков достаточно для понимания. 
3) Пример я могу привести вот только пользы будет никакой. Да и его легко нагуглить.

http://microsin.net/programming/ARM/wav-decoding.html
http://www.delphisources.ru/pages/sources/...-riff-wave.html
http://habrahabr.ru/post/113611/

Вот только качество этих примеров оставляет желать лучшего. Формат сложный и надо много поддерживать.  Лучше взять библиотеку библиотеку вот к примеру FFMPeg тем более она с исходным кодом.
http://git.videolan.org/?p=ffmpeg.git;a=bl...013a924;hb=HEAD

Это сообщение отредактировал(а) Pavia - 20.6.2013, 13:10
PM MAIL   Вверх
V0fka
Дата 20.6.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(Pavia @  20.6.2013,  12:59 Найти цитируемый пост)
Пример я могу привести вот только пользы будет никакой

Можно не на примере wav файла, можно на абсолютно любом. Хочу уловить суть. К wav я прицепился после того, как прочитал описание работы с ним. Сразу же всплыли в памяти моменты, когда я читал про описание других бинарных файлов, которые меня действительно интересуют, и тоже ничего не понимал. Вот захотел разобраться как оно вообще все в общем работает. Вот, например, как устроен dbf файл или файл данных SQL сервера. Сейчас я не спрашиваю конкретное описание этих форматов, мне интересно, как система примерно разбирает эти файлы и как понимает что внутри есть объект "таблица", который состоит из "строк" и "колонок", на пересечении которых есть ячейки с конкретными типами данных и сами данные.

Это сообщение отредактировал(а) V0fka - 20.6.2013, 20:59
PM MAIL   Вверх
Pavia
Дата 20.6.2013, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



V0fka, у вас непонимания, от того что вы даже и не пытались понять. Если бы вы пробовали, тогда бы у вас были конкретные вопросы. 

Цитата(V0fka @  20.6.2013,  20:55 Найти цитируемый пост)
 как система

А никак система этим не занимается.  Этим занимается конкретная программа.
Цитата(V0fka @  20.6.2013,  20:55 Найти цитируемый пост)
как понимает что внутри есть объект "таблица"

Она не понимает. В программу уже заложено знания что в файле есть таблица, что есть строки и столбцы.
Заложен признак начала строки и конца. И при разборе файла выполняется свод правил который переводит данные из одного формата в другой. Из внешнего во внутренний.
Вам вначале надо про структуры данных прочитать.

Что касается БД. То тут дела иначе. Внутренний формат совпадает с внешним и разбора нет. Есть функции которые выполняют преобразования данных в файле. Есть такие функции как вставка строки, удаление, сравнение и тд.

Это сообщение отредактировал(а) Pavia - 20.6.2013, 21:23
PM MAIL   Вверх
V0fka
Дата 21.6.2013, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Цитата(Pavia @  20.6.2013,  21:18 Найти цитируемый пост)
V0fka, у вас непонимания, от того что вы даже и не пытались понять. Если бы вы пробовали, тогда бы у вас были конкретные вопросы. 

Понимаете в чем дело, дело в том, что я не пробовал потому, что я даже не понимаю с какой стороны заходить. Не, ну теперь, конечно ряд моментов прояснился, в чем бесспорно есть и ваша заслуга! smile Ещё немножко и буду пробовать что-то "вскрывать" (давно есть претенденты, но в силу неграмотности пока это только планы).

Цитата(Pavia @  20.6.2013,  21:18 Найти цитируемый пост)
Заложен признак начала строки и конца. И при разборе файла выполняется свод правил который переводит данные из одного формата в другой. Из внешнего во внутренний.

Хорошо, программа знает где начинается, где заканчивается каждая строка и колонка и может определить ячейки. А как программа понимает, что, например (все ниже - это условно)

3f 53 aa 3c - это строка "Вася"
d2 58 ac 8d - это число "1234"
65 c5 d9 ff - это вообще картинка

Я могу предположить, что где-то в этом же бинарнике есть информация о том, что по такому-то адресу находится именно строка, по такому-то именно число, а по такому какой-то бинарник. Это так или я все же не в теме? smile 

Цитата(Pavia @  20.6.2013,  21:18 Найти цитируемый пост)
Вам вначале надо про структуры данных прочитать.

Буду искать инфу.

Добавлю ещё вопросик. Все сводится к тому, что любой бинарник состоит из простых типов: строка, число, булево. Причем и видео и звук - это физически набор букв и цифр, так же? Как, например, из звукового файла можно понять какой именно какой инструмент, с какой он громкостью играет, какую ноту и т.п. Этих же правил всех не опишешь нигде, т.к. я могу сам какой-то звук придумать записать его и все будет нормально. Как происходит эта магия? smile 

Pavia и хочу поблагодарить вас за ответы!

Это сообщение отредактировал(а) V0fka - 21.6.2013, 10:42
PM MAIL   Вверх
Pavia
Дата 21.6.2013, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(V0fka @  21.6.2013,  10:41 Найти цитируемый пост)
3f 53 aa 3c - это строка "Вася"d2 58 ac 8d - это число "1234"65 c5 d9 ff - это вообще картинкаЯ могу предположить, что где-то в этом же бинарнике есть информация о том, что по такому-то адресу находится именно строка, по такому-то именно число, а по такому какой-то бинарник. Это так или я все же не в теме?

Зависит от формата файла.
К примеру мы можем сказать что с 0 по 3 байт это целое число. С 10 байта по 20 байт записана строка.
А можем сказать и так что в 0 байте число обозначает что лежит в последующих картинка или строка. К примеру если в нулевом байте 0 то картинка если 1 то строка.

Но обычно так. Есть расширение файла которое говорит что это файл нужного типа.
Расширения не являются уникальным идентификатором формата файла. Поэтому ещё проверяют магическое число или строку которая находиться в начале файла. Тем самым вероятность неправильного определения становиться очень маленькой.
Далее мы уже знаем что за формат файла. У картинке свой и у звука свой и тд.


Цитата

Добавлю ещё вопросик. Все сводится к тому, что любой бинарник состоит из простых типов: строка, число, булево. 
 Есть простые типы есть составные типы, а есть сложные типы.  Вот файл это такой очень сложный тип данных. 
К примеру
Простые такие как Int, float, bool, char
Сложные  ASCIIZ строка, Pascal строки (String, wide string).
Составные такие как запись, массив, объединение. 
Сложные это уже объекты, деревья, очередь, стек, граф.

Цитата

Причем и видео и звук - это физически набор букв и цифр, так же? Как, например, из звукового файла можно понять какой именно какой инструмент, с какой он громкостью играет, какую ноту и т.п. Этих же правил всех не опишешь нигде, т.к. я могу сам какой-то звук придумать записать его и все будет нормально. Как происходит эта магия?

Да, это техномагия.   smile 
Звук это колебания воздуха. Колебания это движение возле некоторой точки. Есть микрофон он переводит механические колебания воздуха в колебания электрического сигнала.
Вкратце про микрофон. Микрафон состоит из пластины которая под движением воздух колеблешься. Давление с пластины передаёться на пьезокристалл(я же сказал волшебство а вы и не верите), который под давлением изменяет потенциал. Провод снимает потенциал с кристалла. Тем самым на проводе создаётся колебательный электрический сигнал.

Раньше эти колебания электрические колебания передавались на электромагнитную головку которая записывала на магнитной ленте сигнал. Сейчас сигнал оцифровывают.

PCM - Pulse-code_modulation - импульсная кодовая модуляция. 
Это формат представления звуковых данных. В виде серии импульсов.
Звук это колебания.  Так вот колебания представляют собой изменение величины называемой амплитудой.  Пластина в микрофоне колеблется относительно точки опоры величина изменения положения пластины относительно точки опоры x это и есть амплитуда. 
А электрический сигнал выдаваемый микрофоном пропорционален этой величине. 
Так вот если этот сигнал разбить во времени,на серию импульсов. Импульс определяет значение амплитуды на коротком участке времени.
Так вот серия импульсов описывает колебания звука. Это и называется PCM.

Так вот уровень амплитуды т.е. уровень импульса переводиться в число. Говорят что он квантуется или оцифровывается.  Делает это такое устройство, как АЦП(Аналогово цифровой преобразователь)
Так вот в Wav обычно храниться звук в виде PCM с 8 или 16 бит на отчет(Sample).
Отчет - это одно измерение или одни импульс.

Т.е в WAV храниться серия импульсов с оцифрованной амплитудой. 
Или в виде серии отчетов.
Так можно представить любой звук.
Как я уже сказал импульс имеет время. Так вот в секунде мы можем сделать разное число импульсов. Т.е мы можем писать с разной частотой дискретизации.

А есть ещё ЦАП- цифровой аналоговый преобразователь. Который выполняет обратное преобразование к АЦП.
Он переходит из цифрового кода в аналоговый который по провода мы уже мы можем подвести к динамику. Который преобразуя электрический сигнал в механический колебания породит звук.
PM MAIL   Вверх
volatile
Дата 21.6.2013, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(V0fka @  21.6.2013,  10:41 Найти цитируемый пост)
Я могу предположить, что где-то в этом же бинарнике есть информация о том, что по такому-то адресу находится именно строка

Никаких общих правил нет.
Есть такое понятие как "спецификация файла"
Это, простым языком, правила где и что расположено в файле.
Спецификация - это документ, на каждый тип файлов он свой.
На какой-то тип файла, (ну например WAV) Спецификация может быть окрыта.
На другой тип, спецификация закрыта. (проприетарные форматы, многие форматы MS например, ялвяюцца закрытыми.)

На открытые типы вы можете поискать спецификацию в сети.
Но там без знания инглиша, и главное без неслабого знания компа, и предмета приложения, делать нечего.

PM MAIL   Вверх
V0fka
Дата 25.6.2013, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 5.11.2006
Где: Украина

Репутация: нет
Всего: нет



Pavia, большое спасибо за очень развернутый последний ответ и за все предыдущие! Благодаря вам, я более-менее получил понятие о том, как "все устроено". smile 

volatile, и вам премного благодарен за ответ! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.