Как найти длительность звукового файла

Обновлено: 07.07.2024

Данное электронное пособие содержит группу задач по теме «Кодирование звуковой информации». Сборник задач разбит на типы задач исходя из указанной темы. Каждый тип задач рассматривается с учетом дифференцированного подхода, т. е. рассматриваются задачи минимального уровня (оценка «3»), общего уровня (оценка «4»), продвинутого уровня (оценка «5»). Приведенные задачи взяты из различных учебников (список прилагается). Подробно рассмотрены решения всех задач, даны методические рекомендации для каждого типа задач, приведен краткий теоретический материал. Для удобства пользования пособие содержит ссылки на закладки.

Типы задач:

При решении задач учащиеся опираются на следующие понятия:

Временная дискретизация – процесс, при котором, во время кодирования непрерывного звукового сигнала, звуковая волна разбивается на отдельные маленькие временные участки, причем для каждого такого участка устанавливается определенная величина амплитуды. Чем больше амплитуда сигнала, тем громче звук.

Глубина звука (глубина кодирования) - количество бит на кодировку звука.

Уровни громкости (уровни сигнала) - звук может иметь различные уровни громкости. Количество различных уровней громкости рассчитываем по формуле N = 2 I где I – глубина звука.

Частота дискретизации – количество измерений уровня входного сигнала в единицу времени (за 1 сек). Чем больше частота дискретизации, тем точнее процедура двоичного кодирования. Частота измеряется в герцах (Гц). 1 измерение за 1 секунду -1 ГЦ.

1000 измерений за 1 секунду 1 кГц. Обозначим частоту дискретизации буквой D . Для кодировки выбирают одну из трех частот: 44,1 КГц, 22,05 КГц, 11,025 КГц.

Считается, что диапазон частот, которые слышит человек, составляет от 20 Гц до 20 кГц .

Качество двоичного кодирования – величина, которая определяется глубиной кодирования и частотой дискретизации.

Аудиоадаптер (звуковая плата) – устройство, преобразующее электрические колебания звуковой частоты в числовой двоичный код при вводе звука и обратно (из числового кода в электрические колебания) при воспроизведении звука.

Характеристики аудиоадаптера: частота дискретизации и разрядность регистра.).

Разрядность регистра - число бит в регистре аудиоадаптера. Чем больше разрядность, тем меньше погрешность каждого отдельного преобразования величины электрического тока в число и обратно. Если разрядность равна I , то при измерении входного сигнала может быть получено 2 I = N различных значений.

Размер цифрового моноаудиофайла ( A ) измеряется по формуле:

A = D * T * I /8 , где D – частота дискретизации (Гц), T – время звучания или записи звука, I разрядность регистра (разрешение). По этой формуле размер измеряется в байтах.

Размер цифрового стереоаудиофайла ( A ) измеряется по формуле:

A =2* D * T * I /8 , сигнал записан для двух колонок, так как раздельно кодируются левый и правый каналы звучания.

Учащимся полезно выдать таблицу 1 , показывающую, сколько Мб будет занимать закодированная одна минута звуковой информации при разной частоте дискретизации:

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

Таким образом, непрерывная зависимость громкости звука от времени A(t) заменяется на дискретную последовательность уровней громкости. На графике это выглядит как замена гладкой кривой на последовательность "ступенек".

Частота дискретизации. Для записи аналогового звука и его преобразования в цифровую форму используется микрофон, подключенный к звуковой плате. Качество полученного цифрового звука зависит от количества измерений уровня громкости звука в единицу времени, т.е. частоты дискретизации. Чем большее количество измерений производится за 1 секунду (чем больше частота дискретизации), тем точнее "лесенка" цифрового звукового сигнала повторяет кривую аналогового сигнала.

Частота дискретизации звука - это количество измерений громкости звука за одну секунду, измеряется в герцах (Гц). Обозначим частоту дискретизации буквой f.

Частота дискретизации звука может лежать в диапазоне от 8000 до 48 000 измерений громкости звука за одну секунду. Для кодировки выбирают одну из трех частот: 44,1 КГц, 22,05 КГц, 11,025 КГц.

Глубина кодирования звука. Каждой "ступеньке" присваивается определенное значение уровня громкости звука. Уровни громкости звука можно рассматривать как набор возможных состояний N, для кодирования которых необходимо определенное количество информации b , которое называется глубиной кодирования звука

Глубина кодирования звука - это количество информации, которое необходимо для кодирования дискретных уровней громкости цифрового звука.

Если известна глубина кодирования, то количество уровней громкости цифрового звука можно рассчитать по формуле N = 2 b . Пусть глубина кодирования звука составляет 16 битов, тогда количество уровней громкости звука равно:

В процессе кодирования каждому уровню громкости звука присваивается свой 16-битовый двоичный код, наименьшему уровню звука будет соответствовать код 0000000000000000, а наибольшему - 1111111111111111.

Качество оцифрованного звука. Чем больше частота и глубина дискретизации звука, тем более качественным будет звучание оцифрованного звука. Самое низкое качество оцифрованного звука, соответствующее качеству телефонной связи, получается при частоте дискретизации 8000 раз в секунду, глубине дискретизации 8 битов и записи одной звуковой дорожки (режим "моно"). Самое высокое качество оцифрованного звука, соответствующее качеству аудио-CD, достигается при частоте дискретизации 48 000 раз в секунду, глубине дискретизации 16 битов и записи двух звуковых дорожек (режим "стерео").

Необходимо помнить, что чем выше качество цифрового звука, тем больше информационный объем звукового файла.

1. Рассчитайте объём монофонического аудиофайла длительностью 10 с при 16-битном кодировании и частоте дискретизации 44,1 к Гц. (861 Кбайт)

2. Производится двухканальная (стерео) звукозапись с частотой дискретизации 48 кГц и 24-битным разрешением. Запись длится 1 минуту, ее результаты записываются в файл, сжатие данных не производится. Какое из приведенных ниже чисел наиболее близко к размеру полученного файла, выраженному в мегабайтах?

3. Производится одноканальная (моно) звукозапись с частотой дискретизации 11 кГц и глубиной кодирования 24 бита. Запись длится 7 минут, ее результаты записываются в файл, сжатие данных не производится. Какое из приведенных ниже чисел наиболее близко к размеру полученного файла, выраженному в мегабайтах?

4. Производится двухканальная (стерео) звукозапись с частотой дискретизации 11 кГц и глубиной кодирования 16 бит. Запись длится 6 минут, ее результаты записываются в файл, сжатие данных не производится. Какое из приведенных ниже чисел наиболее близко к размеру полученного файла, выраженному в мегабайтах?

5. При 16-битном кодировании, частоте дискретизации 32 кГц и объёме моноаудиофайла 700 Кбайт время звучания равно:

6. Одна минута записи цифрового аудиофайла занимает на диске 1,3 Мб, разрядность звуковой платы - 8. С какой частотой дискретизации записан звук?

7. Аналоговый звуковой сигнал был дискретизирован сначала с использованием 256 уровней интенсивности сигнала (качество звучания радиотрансляции), а затем 65 536 уровней (качество звучания аудио- CD ). Во сколько раз различаются информационные объёмы оцифрованного звука?


I - объем звукового файла (бит)
F - частота дискретизации (Гц) или измерений в секунду
i - глубина (вес) кодирования звука (бит)
t - время звучания звука (сек)
k - количество каналов в записи (моно k=1, стерео k=2, квадро k=4)

ФОРМУЛА ОБЪЕМА ЧЕРЕЗ СКОРОСТИ ПЕРЕДАЧИ ИНФОРМАЦИИ И ВРЕМЯ

I - объем звукового файла (бит)
v - скорость передачи информации (бит/сек)
t - время передачи информации (сек)

1. Передача звуковых файлов

Задача 1

Стереоаудиофайл передается со скоростью 32 000 бит/с. Файл был записан при среднем качестве звука: глубина кодирования – 16 бит, частота дискретизации – 48 000 измерений в секунду, время записи ─ 90 сек.Сколько времени будет передаваться файл? Время укажите в секундах.

РЕШЕНИЕ: I = F*i*t*k Мы знаем:F = 48 000, i = 16, t = 90, k = 2
Находим объем I = F*i*t*k
Мы знаем скорость v = 32000, находим время t = I/v, составим программу для быстрого подсчёта

ПАСКАЛЬ

PYTHON

F = 48000
i = 16
t = 90
k = 2
I = F*i*t*k
v = 32000
t = I/v
print(t)

ОТВЕТ:4320

Задача 2

Музыкальный фрагмент был оцифрован и записан в виде файла без использования сжатия данных. Получившийся файл был передан в город А по каналу связи за 30 секунд. Затем тот же музыкальный фрагмент был оцифрован повторно с разрешением в 2 раза выше и частотой дискретизации в 1,5 раза меньше, чем в первый раз. Сжатие данных не производилось. Полученный файл был передан в город Б; пропускная способность канала связи с городом Б в 4 раза выше, чем канала связи с городом А. Сколько секунд длилась передача файла в город Б? В ответе запишите только целое число, единицу измерения писать не нужно.

РЕШЕНИЕ: Пусть I1 первоначальный размер оцифрованного фрагмента, тогда размер второго I2 = I1*2/1.5 = 4/3*I1, то есть в 4/3 объем второго получился больше первого файла, и передаваться будет дольше на 4/3. Пропускная способность (скорость) канала в город Б в 4 раза выше, получаем t = (30*4/3)/4 = 10

2. Хранение звуковых файлов

Задача 1

Производилась двухканальная (стерео) звукозапись с частотой дискретизации 64 кГц и 24-битным разрешением. В результате был получен файл размером 48 Мбайт, сжатие данных не производилось. Определите приблизительно, сколько времени (в минутах) проводилась запись. В качестве ответа укажите ближайшее к времени записи целое число.

РЕШЕНИЕ: I = F*i*t*k Мы знаем:F = 64кГц = 64000Гц, i = 24бита, k = 2, I = 48 MБайт Находим время t = I/F*i*k, легко составим программу что бы не запутаться в переводе и вычислениях

ПАСКАЛЬ

PYTHON

F = 64000
i = 24
k = 2
I = 48*1024*1024*8
t = I/(F*i*k)
print(t/60)

Как вариант, кто не хочет составлять программу считаем вручную, используя степени двоек:

48=3*16=3*2^4, 1024 = 2^10, 8 = 2^3, 64000 = 64*1000= 2^6*2^3*125, 24=3*2^3, 2=2^1

t = (48 *1024*1024*8)/(64000*24*2)=3*2^4*2^10*2^10*2^3)/(2^6*2^3*125*3*2^3*2^1)=(2^24)/(125*2^13)=2^14/125= 16384/125=131,072/60=2.18453333333333

Получили t = 2.18453333333333, время записи примерно равно 2 минутам
ОТВЕТ:2

Задача 2

Производится четырёхканальная (квадро) звукозапись с частотой дискретизации 32 кГц и 32-битным разрешением. Запись длится 3 минуты, её результаты записываются в файл, сжатие данных не производится.

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

РЕШЕНИЕ:Мы знаем: F = 32кГц = 32000Гц, i = 32бита, k = 4, t = 3мин=180с. Находим I = F*i*t*k , легко составим программу что бы не запутаться в переводе и вычислениях

var Iob,F,i,t,k:real;
begin
F := 32000;
i := 32;
t :=180;
k := 4;
Iob := (F*i*t*k)/(1024*1024*8);

F = 32000
i = 32
t = 180
k = 4
I = (F*i*t*k)/(1024*1024*8)
print(I)

Получили 87.890625, округляем до ближайшего целого кратного 10, получаем 90(МБайт)
ОТВЕТ: 90

РЕШИТЬ САМОСТОЯТЕЛЬНО:

Производится звукозапись музыкального фрагмента в формате стерео (двухканальная запись) с частотой дискретизации 32 кГц и 32-битным разрешением. Результаты записываются в файл, сжатие данных не производится; размер полученного файла – 64 Мбайт. Затем производится повторная запись этого же фрагмента в формате моно (одноканальная запись) с частотой дискретизации 16 кГц и 16-битным разрешением. Сжатие данных не производилось. Укажите размер файла в Мбайт, полученного при повторной записи. В ответе запишите только целое число, единицу измерения писать не нужно.

ПЕРЕДАЧА ИЗОБРАЖЕНИЙ

ФОРМУЛА ОПРЕДЕЛЕНИЯ ОБЪЕМА КАРТИНКИ

I - объем графического файла (бит)
К - общее количество точек картинки или разрешающая способность монитора (пиксел)
i - глубина цвета (бит) или вес одного пиксела

ФОРМУЛА ОПРЕДЕЛЕНИЯ ЦВЕТОВОЙ ПАЛИТРЫ

N - цветовая палитра
i - глубина цвета (бит) или вес одного пиксела

ФОРМУЛА ОБЪЕМА ЧЕРЕЗ СКОРОСТИ ПЕРЕДАЧИ ИНФОРМАЦИИ И ВРЕМЯ

I - объем графического файла (бит)
v - скорость передачи информации (бит/сек)
t - время передачи информации (сек)

Задача 1

Сколько секунд потребуется модему, передающему информацию со скоростью 32000 бит/с, чтобы передать 24─цветное растровое изображение размером 800 на 600 пикселей, при условии что цвет кодируется минимально возможным количеством бит.

РЕШЕНИЕ:Мы знаем: K = 800*600, N= 24 бита, v = 32000 бит/c. С помощью N бит можно закодировать 2 N вариантов, 2 4 < 24 < 2 5 , следовательно, один цвет кодируется i=5 битами. Находим I = K*i , находим время t = I/v,

Q = 800 * 600 * 5 бит = 480 000 * 5 бит. t = 480 000 * 5 бит / 32 000 бит/с = 75 с.

легко составим программу что бы не запутаться в переводе и вычислениях

ОТВЕТ: 75

РЕШИТЬ САМОСТОЯТЕЛЬНО

ПЕРЕДАЧА ТЕКСТОВ

ФОРМУЛА ОПРЕДЕЛЕНИЯ ОБЪЕМА ТЕКСТОВОЙ ИНФОРМАЦИИ

I - объем текстового файла (бит)
К - общее количество символов
i - вес одного символа (бит)

МОЩНОСТЬ АЛФАВИТА

N - мощность алфавита
i - вес одного символа(бит)

Задача 1

Модем передает данные со скоростью 7680 бит/с. Передача текстового файла заняла 1,5 мин. Определите, сколько страниц содержал переданный текст, если известно, что он был представлен в 16-битной кодировке Unicode, а на одной странице – 400 символов.

Объём информации вычисляется по формуле I = v * t, где t — время передачи v — cкорость передачи данных. Поэтому I = 7680 бит/c * 90с = 691200 бит. Каждый символ в данной кодировке кодируется 16-ю битами, i = 16. Следовательно, количество символов определится так: K= I/i = 691200 бит / 16 бит = 43200, на одной странице 400 символов, поэтому количество страниц опредлится так: St = 43200 / 400 = 108.

ОТВЕТ: 108
Попробуйте самостоятельно составить программу

СРАВНЕНИЕ ДВУХ СПОСОБОВ ПЕРЕДАЧИ ДАННЫХ

Задача 1

Документ объемом 10 Мбайт можно передать с одного компьютера на другой двумя способами:

А) Сжать архиватором, передать архив по каналу связи, распаковать

Б) Передать по каналу связи без использования архиватора.

Какой способ быстрее и насколько, если

– средняя скорость передачи данных по каналу связи составляет 2 18 бит в секунду,

– объем сжатого архиватором документа равен 30% от исходного,

– время, требуемое на сжатие документа – 7 секунд, на распаковку – 1 секунда?

В ответе напишите букву А, если способ А быстрее или Б, если быстрее способ Б. Сразу после буквы напишите количество секунд, насколько один способ быстрее другого.

Так, например, если способ Б быстрее способа А на 23 секунды, в ответе нужно написать Б23. Слов «секунд», «сек.», «с.» к ответу добавлять не нужно.


Попробуйте разобраться в программе и решить самостоятельно задачу

Документ объемом 5 Мбайт можно передать с одного компьютера на другой двумя способами:

А) Сжать архиватором, передать архив по каналу связи, распаковать.

Б) Передать по каналу связи без использования архиватора.

Какой способ быстрее и насколько, если

– средняя скорость передачи данных по каналу связи составляет 2 18 бит в секунду,

– объем сжатого архиватором документа равен 80% от исходного,

– время, требуемое на сжатие документа – 35 секунд, на распаковку – 3 секунды?

В ответе напишите букву А, если способ А быстрее или Б, если быстрее способ Б. Сразу после буквы напишите количество секунд, насколько один способ быстрее другого.

Так, например, если способ Б быстрее способа А на 23 секунды, в ответе нужно написать Б23.

Слов «секунд», «сек.», «с.» к ответу добавлять не нужно.

ОПРЕДЕЛЕНИЕ ВРЕМЕНИ ПЕРЕДАЧИ ФАЙЛА

У Толи есть доступ к сети Интернет по высокоскоростному одностороннему радиоканалу, обеспечивающему скорость получения информации бит в секунду. У Миши нет скоростного доступа в Интернет, но есть возможность получать информацию от Толи по низкоскоростному телефонному каналу со средней скоростью бит в секунду. Миша договорился с Толей, что тот будет скачивать для него данные объемом 5 Мбайт по высокоскоростному каналу и ретранслировать их Мише по низкоскоростному каналу.

Компьютер Толи может начать ретрансляцию данных не раньше, чем им будут получены первые 512 Кбайт этих данных. Каков минимально возможный промежуток времени (в секундах) с момента начала скачивания Толей данных до полного их получения Мишей?

В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.


Однажды мне понадобилось решить простенькую (как мне тогда казалось) задачу – в PHP-скрипте узнать длительность mp3-файла. Я слышал о ID3 тегах и сразу подумал, что информация о длительности хранится либо в тегах, либо в заголовках mp3-файла. Поверхностные поиски в интернете показали что за пару-тройку минут решить эту задачу не получится. Поскольку от природы я довольно любопытен а время не поджимало — решил не использовать сторонние инструменты а разобраться в одном из самых популярных форматов самостоятельно.

Если Вам интересно, что там внутри – добро пожаловать под кат (трафик).

В данной статье мы не будем подробно останавливаться на извлечении ID3v2 тегов – это можно вынести в отдельную статью, так как там есть различные нюансы. А так же на фрагментах заголовков, которые практически не используются в настоящее время (например, часть Emphasis заголовка mp3-фрейма). Так же мы не рассматриваем структуру самих аудиоданных — тех самых, которые слышим из колонок.

ID3 (от англ. Identify a MP3) — формат метаданных, наиболее часто используемый в звуковых файлах в формате 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-файл состоит из фреймов, которые можно извлекать только последовательно. Фрейм содержит в себе заголовок и аудио-данные. Поскольку мы не ставим себе целью написать прошивку для магнитофона – нас интересует именно заголовок фрейма.

О нем подробнее (куча таблиц и сухой информации)

Размер заголовка – 4 байта.


  • 4 Маркер – 11 бит, заполненные единицами (Frame sync)
  • 12 Индекс версии MPEG (Audio version ID)
  • 13 Индекс версии Layer (Layer index)

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

    В таблице хранятся значения битрейта в килобит/сек. Однако в данном формате подразумевается, что 1 килобит = 1000 бит, а не 1024. Таким образом 96 Кбит/сек = 96000 бит/сек.
  • 20 Индекс частоты дискретизации (Sampling rate index)
  • [22] Бит смещения (Padding bit)
    Если он установлен, то данные смещаются на 1 байт. Это важно для расчета размера фрейма.
  • [23] Бит private (только для информации)
  • 24 Режим канала (Channel mode)
  • 26 Расширение режима канала. (Mode extension) Используется только с Joint stereo
  • [28] Копирайт (Copyright bit) – только для информации
  • [29] Оригинал (Original bit) – только для информации.
  • 30 Акцент (Emphasis) – в данный момент практически не используется.

Режимы сжатия данных или какой бывает битрейт

Существует 3 режима сжатия данных:

CBR (constant bitrate) – постоянный битрейт. Не меняется на всем протяжении трека.

VBR (variable bitrate) – переменный битрейт. При этом сжатии битрейт постоянно меняется на протяжении трека.

ABR (average bitrate) – усредненный битрейт. Это понятие используется только при кодировании файла. На «выходе» получается файл с VBR.


Если файл закодирован с постоянным битрейтом – то мы уже можем наконец-то! получить длительность нашего трека по следующей формуле:
Длительность = Размер аудиоданных / Битрейт (в битах!) * 8

Например, файл имеет размер 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-файла для теста.

Читайте также: