Вычисление длины MP3 кадров в миллисекундах [закрыто]
Допустим, длина одного кадра MP3 в байтах равна 104: как получить ее в миллисекундах? Есть ли какая-то формула или что-то, чтобы сделать это?
6 ответов:
Хм, это странно, но никто не ответил на вопрос должным образом. Я исследовал, вот Формула:
Длина кадра (в МС) = (количество отсчетов на кадр / частота отсчетов (в Гц)) * 1000
Типичный MP3 (MPEG Layer III, Версия 1) имеет 1152 сэмпла на кадр и частоту дискретизации (обычно) 44100 Гц. Итак (1152/44100) * 1000 = 26,122449 МС на кадр.
Обратите внимание, что длина кадра (время) не зависит от битрейта.
Вам нужно разобрать заголовок кадра MP3, чтобы получить версию MP3 и номер слоя (смотрите этот документ для формата заголовка кадра). После того, как они у вас есть, вы можете использовать следующую таблицу поиска, чтобы получить количество образцов в кадре.
private static readonly int[,] samplesPerFrame = new int[,] { { // MPEG Version 1 384, // Layer1 1152, // Layer2 1152 // Layer3 }, { // MPEG Version 2 & 2.5 384, // Layer1 1152, // Layer2 576 // Layer3 } };
Я использовал другой подход для вычисления времени каждого кадра в mp3-файле.. предположим, что все кадры имеют одинаковый размер в файле.. поэтому я просто получаю общее время mp3-файла в миллисекундах.. затем вычислите общее количество кадров в файле и, наконец, разделите общее время на общее количество кадров.. таким образом, формула будет выглядеть следующим образом:
float frameTime = totalTimeMillisec / totalFrames;
Вы получите общее время каждого кадра в треке в миллисекундах.. после того, как я сделал это, я получил около 52 миллисекунд... и это было похоже на то, что сказал Марк хит..
В любом случае спасибо всем за решения..
Фрейм-это не то же самое, что время. Но если вы знаете общий размер, вы можете сделать что-то вроде этого накладные расходы+кадр*время=общий размер.
Http://en.wikipedia.org/wiki/MP3 имеет запись о структуре файлов MP3, но вы должны попытаться найти ее с более подробной информацией.
Заголовок кадра содержит поле под названием скорость передачи битов. Учитывая эту скорость передачи битов и размер данных кадра, вы можете определить, сколько реального времени музыки находится в этих данных кадра. Я ожидаю, что формула будет: DataSize = BitRate * TimeInterval.
См. http://www.mp3-tech.org/programmer/frame_header.html для получения подробной информации о кодировании скорости передачи битов.
Поскольку данные зашифрованы, вы не можете знать скорость воспроизведения до тех пор, пока данные не будут расшифрованы. Никто не говорит, как шифровать (сжимать) и распаковывать данные. Все, что я знаю, это то, что Хромая программа возьмет файл волны, а затем отфильтрует / перепроверит его, а затем каким-то образом сожмет данные, прежде чем поместить их в рамки. Я не знаю, используют ли эти mp3-плееры 8 или 16-битные слова для воспроизведения в каждом канале. Но скорость передачи битов и все остальное зависит от размера байта канала и частоты дискретизации. Не то же самое, что данные, которые сначала приписывают кодеру. Как увидеть конечный результат, который играет игрок, - это трюк здесь. CBR делает хорошую ссылку, из которой позже можно узнать VBR.
Как можно взять 16 бит (слово на образец) одного образца одного канала и сжать ot для данных MP3 ? Есть ли результаты 12 бит или меньше ? Как называется процедура сжатия ?