Чтение файлов MP3

Я хочу читать файлы MP3 на С++, и я предпочитаю писать свой собственный код для этого. В основном, чтобы узнать, как работает файл. Я хочу прочитать все бит шестнадцатеричных данных файла MP3 и включить его динамики.:) Я понятия не имею, с чего начать, поскольку я еще не знаю, как данные фактически хранятся в файле MP3.

Спасибо за помощь

Ответы

Ответ 2

Вы можете купить спецификацию формата MP3 от здесь. Это около 160 евро.

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

Как начать с написания проигрывателя, который может воспроизводить файлы .wav? (Любой разумный .wav файл, заметьте, учитывая формат файла и различные аудиоформаты)

Ответ 3

Я немного научился, может быть, это поможет вам.

Структура файла

enter image description here Файл MP3 состоит из нескольких фреймов MP3, которые состоят из заголовка и блока данных. Эта последовательность кадров называется элементарным потоком. Фреймы не являются независимыми элементами ( "байтовый резервуар" ) и поэтому не могут быть извлечены на произвольных границах кадров. Блоки данных MP3 содержат (сжатую) аудиоинформацию по частотам и амплитудам. На диаграмме показано, что заголовок MP3 состоит из слова синхронизации, которое используется для идентификации начала действительного кадра. За этим следует бит, указывающий, что это стандарт MPEG и два бита, которые указывают, что используется слой 3; следовательно, MPEG-1 Audio Layer 3 или MP3. После этого значения будут отличаться в зависимости от файла MP3. ISO/IEC 11172-3 определяет диапазон значений для каждого раздела заголовка вместе со спецификацией заголовка. Большинство MP3 файлов сегодня содержат метаданные ID3, которые предшествуют или следуют за MP3-фреймами; как отмечено на диаграмме.

Исходный код LAME

LAME - это MP3-библиотека, но также и open-source, что означает, что вы можете загрузить исходный код и изучить его. http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download Я сам посмотрел на него, и, похоже, он написан на C или С++, так что вам повезло. Если вы изучите исходный код LAME и поймете, как это работает, возможно, вам удастся создать собственную библиотеку MP3. Просто отметьте, что LAME не является библиотекой для воспроизведения файлов MP3, но для их кодирования. Но поскольку он создает MP3 вместо того, чтобы читать их, я думаю, что структура должна быть немного более ясной, чем любая другая библиотека MP3-плееров.

Объяснение формата файла MP3

Это также объясняет, как MP3 работает достаточно хорошо, но это чистая теория, поэтому вам нужно много терпения. http://www.mp3-converter.com/mp3codec/

Ответ 4

Ну, это было бы сложно:)

В любом случае, ваше приложение должно состоять из двух частей - библиотеки/подпрограмм декомпрессии и основного бэкэнда, для чего потребуется несколько распакованных блоков данных и фактически воспроизвести его.

Я бы рекомендовал книгу "Сжатие данных" Дэвида Саломона, чтобы понять, как на самом деле должен работать ваш декодер. Варианты для ваших вторых частей, к сожалению, слишком широки, чтобы покрыть их в одном предложении.

Вы также можете попробовать исследовать некоторые декодеры/декодирования с открытым исходным кодом mp3, такие как этот.

Ответ 5

Если вы настаиваете на том, чтобы делать это самостоятельно, вам в значительной степени нужно начать с спецификации:

http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html

Ответ 6

Вы хотите использовать некоторую библиотеку декодера для своей задачи, например http://sourceforge.net/projects/mpg123net/

Существует также MAD-декодер... http://www.underbit.com/products/mad/

Чтобы правильно читать mp3 файл, есть много математики, и я думаю, что вы действительно не хотите входить в этот...