Внутри MP3. А как оно всё устроено?
Однажды мне понадобилось решить простенькую (как мне тогда казалось) задачу – в PHP-скрипте узнать длительность mp3-файла. Я слышал о ID3 тегах и сразу подумал, что информация о длительности хранится либо в тегах, либо в заголовках mp3-файла. Поверхностные поиски в интернете показали что за пару-тройку минут решить эту задачу не получится. Поскольку от природы я довольно любопытен а время не поджимало — решил не использовать сторонние инструменты а разобраться в одном из самых популярных форматов самостоятельно.
Если Вам интересно, что там внутри – добро пожаловать под кат (трафик).
В данной статье мы не будем подробно останавливаться на извлечении ID3v2 тегов – это можно вынести в отдельную статью, так как там есть различные нюансы. А так же на фрагментах заголовков, которые практически не используются в настоящее время (например, часть Emphasis заголовка mp3-фрейма). Так же мы не рассматриваем структуру самих аудиоданных — тех самых, которые слышим из колонок.
ID3 теги
Существует две абсолютно разных версии ID3-данных: ID3v1 и ID3v2.
ID3v1 – имеет фиксированный размер в 128 байт, которые дописываются в конец mp3-файла. Там можно хранить: название трека, исполнитель, альбом, год, комментарий, номер трека (для версии 1.1) и жанр.

Довольно быстро всем стало понятно, что 128 байт – очень уж небольшое место для хранения таких данных. И поэтому, со временем, появилась и успешно используется вторая версия данных – ID3v2.
В отличии от первой версии, теги v2 имеют переменную длину и размещаются в начале файла, что позволяет поддерживать потоковое воспроизведение. (Формат ID3v2.4 позволяет так же хранить данные и в конце файла).
Данные ID3v2 состоят из заголовка и последующих фреймов ID3v2. Например, в версии ID3v2.3 существует более 70 типов фреймов.
- маркер всегда равен ‘ID3’
- В данный момент имеются три версии ID3v2.2, ID3v2.3 и ID3v2.4
Версия v2.2 считается устаревшей.
v2.3 – самая популярная версия.
v2.4 – набирает популярность. Одно из отличий от v2.3 в том, что позволяет использовать кодировку UTF-8 (а не только UTF-16) - Флаги. В настоящее время используются только три (5,6,7) бита:
bin: %abc00000
a ‘unsynchronisation’ – используется только с MPEG-2 и MPEG-2.5 форматами.
b ‘Extended header’ – указывает на наличие расширенного заголовка
с ‘Experimental indicator’ – эксперементальный индикатор - Длина. Особенность указания длины данных ID3v2 в том, что в каждом байте 7-й бит не используется и всегда установлен в 0.

В данном случае вместе с заголовком ID3v2 (10 байт) – данные ID3v2 занимают 1024 байта.
После ID3v2-заголовка идут собственно теги. Подробный разбор чтения тегов ID3v2, как сказано выше, я решил не включать в эту статью.
Теперь у нас есть информация о наличии и длине тегов ID3 и мы можем приступать в разбору mp3-фрейма и понять-таки – где же хранится длительность. А заодно понять и всё остальное.
MP3-фрейм
Весь mp3-файл состоит из фреймов, которые можно извлекать только последовательно. Фрейм содержит в себе заголовок и аудио-данные. Поскольку мы не ставим себе целью написать прошивку для магнитофона – нас интересует именно заголовок фрейма.
О нем подробнее (куча таблиц и сухой информации)
Размер заголовка – 4 байта.

- [0-10] Маркер – 11 бит, заполненные единицами (Frame sync)
- [11-12] Индекс версии MPEG (Audio version ID)

- [13-14] Индекс версии Layer (Layer index)

Кстати, MP3 – это MPEG-1 Layer III - [15] Бит защиты (Protection bit)
1 – нет защиты
0 – заголовок защищен 16-бит. CRC (следует за заголовком) - [16-19] Индекс битрейта (Bitrate index)

В таблице хранятся значения битрейта в килобит/сек. Однако в данном формате подразумевается, что 1 килобит = 1000 бит, а не 1024. Таким образом 96 Кбит/сек = 96000 бит/сек. - [20-21] Индекс частоты дискретизации (Sampling rate index)

- [22] Бит смещения (Padding bit)
Если он установлен, то данные смещаются на 1 байт. Это важно для расчета размера фрейма. - [23] Бит private (только для информации)
- [24-25] Режим канала (Channel mode)

- [26-27] Расширение режима канала. (Mode extension) Используется только с Joint stereo
- [28] Копирайт (Copyright bit) – только для информации
- [29] Оригинал (Original bit) – только для информации.
- [30-31] Акцент (Emphasis) – в данный момент практически не используется.
Режимы сжатия данных или какой бывает битрейт
Существует 3 режима сжатия данных:
CBR (constant bitrate) – постоянный битрейт. Не меняется на всем протяжении трека.
VBR (variable bitrate) – переменный битрейт. При этом сжатии битрейт постоянно меняется на протяжении трека.
ABR (average bitrate) – усредненный битрейт. Это понятие используется только при кодировании файла. На «выходе» получается файл с VBR.
Например, файл имеет размер 350670 байт. Есть ID3v1 теги (128 байт) и ID3v2 теги (1024 байта). Битрейт = 96. Следовательно размер аудиоданных равен 350670 – 128 – 1024 = 349518 байт.
Длительность = 349518 / 96000 * 8 = 29,1265 = 29 секунд
Необходимо пояснить – как определить режим сжатия. Всё просто. Если файл сжат с VBR – то добавляется VBR-заголовок. По его наличию мы и можем понять, что используется переменный битрейт.
Есть два вида заголовков: Xing и VBRI.
Xing размещается со смещением от начала первого mp3-фрейма в позиции, согласно таблице:

Например: у нас ID3v2 тег занимает 1024 байта. Если наш mp3-файл имеет режим канала «Стерео» — то заголовок VBR Xing будет начинаться со смещения 1024 + 32 = 1056 байт.
Заголовок VBRI всегда размещается со смещением +32 байта от начала первого mp3-фрейма.
Первые четыре байта в обоих заголовках содержат маркер ‘Xing’ или ‘Info’ для Xing. И ‘VBRI’ для VBRI.
Эти VBR заголовки имеют переменную длину и содержат различную информацию о кодировании файла. Подробнее о структуре заголовков VBR (и не только) можно почитать, например, тут.
Я же расскажу только о том, что нас интересует в данный момент. А именно – количество фреймов (Number of Frames). Это число длиной 4 байта.
В заголовке Xing оно содержится по смещению +8 байт от начала заголовка. В VBRI +14 байт от начала заголовка.
Используя таблицу Сэмплов на фрейм (Sampler Per Frame) мы можем получить длительность mp3-файла, закодированного с переменным битрейтом.

Например: из заголовка VBRI получили количество фреймов 1118, сэмплов на фрейм = 1152. Частота дискретизации = 44100.
Длительность = 1118 * 1152 / 44100 = 29.204 = 29 секунд.
На этом на сегодня всё. Если был кому-то полезен — спасибо.
Для тех, кто захочет немедленно поковырять внутренности mp3 — Тут лежат скрипт на php, которые я писал для себя одновременно с данной статьей и четыре небольших mp3-файла для теста.
Тест СД 1 полугодие повторение (часть 2)

Файл рисунок. bmp находится в папке 671гр, которая вложена в папку Мои рисунки на диске С:.
Назовите путь к файлу:
Варианты ответов
- С:\Мои рисунки\671гр\рисунок.bmp
- Мои рисунки\671гр\рисунок.bmp
- С:\Мои рисунки\671гр\
- С:\671гр\Мои рисунки\рисунок.bmp
Вопрос 5
Какие файлы будут найдены по условию *. mp 3
Варианты ответов
- позволит найти все графические файлы
- позволит найти все файлы, название которых состоит из трёх букв
- позволит найти музыкальные файлы
- позволит найти все файлы презентаций
Вопрос 6
К приложениям общего назначения не относятся
Варианты ответов
- графические редакторы
- авторские системы
- звуковые редакторы
- текстовые редакторы
Вопрос 7
Приложение функционирует под управлением
Варианты ответов
- оперативной памяти
- процессора
- операционной системы
- пользователя
Вопрос 8
Состояние операционной системы, при котором она перестает выдавать результаты и реагировать на запросы — это ..
Варианты ответов
- зацикливание
- отключение монитора
- зависание
- отключение принтера
Вопрос 9
Варианты ответов
- начинается с логического имени диска, затем записывается нужный файл , затем последовательность имён вложенных друг в друга папок
- начинается с последовательности имён вложенных друг в друга папок, в последней из которых находится нужный файл, затем записывается логическое имя диска
- начинается с логического имени диска, затем записывается последовательность имён вложенных друг в друга папок, в последней из которых находится нужный файл
- начинается с последней папки, в которой находится нужный файл, затем записывается логическое имя диска
Вопрос 10
Расширение файлу присваивает:
Варианты ответов
- программа при его создании
- процессор
- пользователь
- операционная система
Вопрос 11
На тип файла указывает:
Варианты ответов
- название файла
- путь к файлу
- расширение имени файла
- имя файла
Вопрос 12
Варианты ответов
- область хранения данных на диске
- программа или данные, хранящиеся в долговременной памяти
- программа или данные, имеющие имя и хранящиеся в оперативной памяти
- программа или данные, имеющие имя и хранящиеся в долговременной памяти
Вопрос 13
Архивный файл можно:
Варианты ответов
- Сжать
- Распаковать
- Запустить на выполнение
- Отредактировать
Вопрос 14
Степень сжатия файла зависит:
Варианты ответов
- Только от типа файла
- Только от программы-архиватора
- От типа файла и программы-архиватора
- От объёма оперативной памяти
Вопрос 15
Архивный файл отличается от исходного файла тем, что:
Варианты ответов
- Доступ к нему занимает меньше времени
- Легче защищается от вирусов
- Занимает меньше места на диске
- Легче защищается от несанкционированного доступа
Вопрос 16
Варианты ответов
- программу для уменьшения информационного объёма (сжатия) файлов
- программу резервного копирования файлов
- программу, предназначенную для хранения редко используемых программных файлов
- программу, обеспечивающую расширение возможностей ОС
Вопрос 17
Архивный файл, представляет собой:
Варианты ответов
- Файл, которым долго не пользовались
- Файл, защищённый от копирования
- Файл, сжатый с помощью архиватора
- Файл, защищённый от несанкционированного доступа
Вопрос 18
Алгоритм, записанный на «понятном» компьютеру языке программирования, называется
Варианты ответов
- исполнителем алгоритмов
- программой
- листингом
- текстовкой
Вопрос 19
Какой из документов является алгоритмом?
Варианты ответов
- правила техники безопасности
- инструкция по регистрации на портале государственных услуг
- расписание занятий
- список группы
Вопрос 20
Свойством алгоритма является:
Варианты ответов
- результативность
- цикличность
- возможность изменения последовательности выполнения команд
- возможность выполнения алгоритма в обратном порядке
Вопрос 21
Свойство алгоритма, заключающееся в том, что каждое действие и алгоритм в целом должны иметь возможность завершения, называется
Варианты ответов
- дискретность
- детерминированность
- конечность
- массовость
Вопрос 22
Количество информации, которое необходимо для кодирования различных уровней сигнала называется:
Варианты ответов
- глубиной кодирования
- частотой дискретизации
- временной дискретизацией
- аналоговым сигналом
Вопрос 23
Частота дискретизации измеряется.
Варианты ответов
- В секундах
- В герцах
- В битах
- Это безразмерная величина
Вопрос 24
Глубина кодирования звука измеряется.
Варианты ответов
- В секундах
- В герцах
- В битах
- Это безразмерная величина
Вопрос 25
Звук в памяти ПК является.
Варианты ответов
- Аналоговым
- Дискретным
- Векторным
- Объектным
Вопрос 26
Назовите формы представления графической информации.
Варианты ответов
- Аналоговая и дискретная
- Векторная и аналоговая
- Дискретная и векторная
- Точечная и аналоговая
Вопрос 27
Для хранения 256-цветного изображения на кодирование одного пикселя выделяется:
Какие файлы будут найдены по условию mp3
Определите, на какой день от начала питания у хищника будет 960 овощей
В первый день отправили хищнику 10 овощей, на второй день 20 овощей, на третий 30 на четвертый 40.
Определите, входит ли строка, указанная в командной строке, при запуске программы, в предложение
помогите разобраться. Срочно нужно составить код программы, а я в Java не бум-бум. .
Как пользоваться Everything

Как искать файлы и папки с помощью Everything

Поиск в Everything с помощью логических операторов
- Логический оператор OR (ИЛИ) – знак (|). Чтобы выполнить поиск по одному из двух условий, вставьте знак | между условиями – к примеру, для поиска «windows» или «flash» введите: windows |flash (в примере на скриншоте найдены все файлы и папки, где в имени встречается одно из заданных условий, то есть ИЛИ windows ИЛИ flash);

- NOT (НЕ) – знак (!). Для исключения чего-либо из поиска, поставьте знак ! перед условием, например, так: !windows (так будут найдены все файлы и папки за исключением тех, где в имени встречается windows);

- AND (И) – ПРОБЕЛ. Чтобы выполнить поиск сразу по двум (трём и так далее) условиям, то просто введите искомые слова через пробел, например: windowsflash (так будут найдены все файлы и папки, где одновременно встречаются эти слова).

- Чтобы найти файлы определённого типа, введите в строку поиска расширение файла, например, для поиска файлов flac введите *.flac в строке поиска;

- Для поиска файлов нескольких типов можно использовать логический оператор «OR» – знак вертикальной черты | – например, так: *.flac | *.mp3 для поиска всех файлов на компьютере с расширениями flac или mp3, соответственно можно осуществлять поиск и более чем по двум условиям.


- Звёздочка (*) в поиске означает любое число любых символов. Например, чтобы найти файлы и папки с именами, начинающимися на a и заканчивающимися на e, введите: a*e

- Знак вопроса (?) в поиске Everything обозначает один любой символ. Так, например, чтобы найти все файлы с расширением из двух символов, введите: *.?? (из трёх символов, введите: *. И так далее).

- Чтобы найти файлы и папки в определённом месте, добавьте обратную косую черту (\) в строку поиска. Например, для поиска всех exe файлов в папке «Загрузки» введите: загрузки\ .exe

- В меню Поиск можно также задействовать опцию: «Учитывать путь», тогда, чтобы, к примеру, найти все .exe файлы в папке «Загрузки», просто введите: загрузки .exe

- Мгновенно найти файлы, изменившиеся сегодня можно следующим образом: dm:today

- Найти файлы и папки, созданные, например, в период с 1 по 21 октября 2019 года можно так: dc:10/1/2019-10/21/2019

В каталоге находятся файлы со следующими именами:
file.mdb
file.mp3
ilona.mpg
pile.mpg
miles.mp3
nil.mpeg
Определите, по какой из масок из них будет отобрана указанная группа файлов:
file.mp3
pile.mpg
miles.mp3
nil.mpeg
Варианты ответов: 1)?il*.m*2)?il*.mp*3)*il?.mp*4)?il*.mp?
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Определяющие черты новгородской архитектуры:
Укажите правильный вариант ответа:
Простота и скромность
Монументальность и многообразие декоративных элементов
Широкое использование западноевропейских форм и традиций
Торжественность и пышность
4. Put the words in the correct order to make sentences. 1. always/ shopping/ we/on /Tuesdays/go __________________________________________________ 2. usually/to/goes/the/in/park/evening/the/she _____________________________________________________ 3. never / Mark/paints/the/morning/in/ _____________________________________________________ 4. usually/I/breakfast/have/half/six/past/at _____________________________________________________ 5. we/visit/often/our/on /Sundays/granny ___________________________________________________