Вычисление длины MP3 кадров в миллисекундах [закрыто]


Допустим, длина одного кадра MP3 в байтах равна 104: как получить ее в миллисекундах? Есть ли какая-то формула или что-то, чтобы сделать это?

6 9

6 ответов:

Хм, это странно, но никто не ответил на вопрос должным образом. Я исследовал, вот Формула:

Длина кадра (в МС) = (количество отсчетов на кадр / частота отсчетов (в Гц)) * 1000

Типичный MP3 (MPEG Layer III, Версия 1) имеет 1152 сэмпла на кадр и частоту дискретизации (обычно) 44100 Гц. Итак (1152/44100) * 1000 = 26,122449 МС на кадр.

Обратите внимание, что длина кадра (время) не зависит от битрейта.

Подробнее: http://www.mp3-converter.com/mp3codec/frames.htm

Вам нужно разобрать заголовок кадра 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 бит или меньше ? Как называется процедура сжатия ?