Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2009, 17:39   #1
Котовский
Пользователь
 
Аватар для Котовский
 
Регистрация: 24.12.2008
Сообщений: 19
По умолчанию Проблема с декодированием файлов формата mp3

пытался декодировать файлы mp3, не получается поймать заголовки фреймов. плюнул, сделал все при помащи bass.dll. у каво-нибуть когда нибуть эта получалось, или по любому лицензию надо?
Пока жирафы думают, кролики делают!
Котовский вне форума Ответить с цитированием
Старый 11.02.2009, 09:53   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ну поймаешь ты заголовки, а дальше что?

Как найти заголовок фрейма (теория)
Сначала нужно найти первый фрейм, пропустить ID3v2 тег если он есть, и всякие другие ненужные байты, опять же если они есть. Заголовок ищется по первым трем кажется битам, не помню точно уже, определенное сочетание этих бит указывает на то что это начало заголовка фрема. В заголовке фрейма указана длина в байтах этого фрейма. Она указана не явно, её нужно высчитывать по формуле. В нете найти описание заголовка и эту формулу не проблема. Таким образом нам уже будет известно положение следующего заголовка. После заголовка идут непосредственно данные фрейма, их и нужно раскодировать, только вот как это сделать я не знаю.

Насчет лицензии да, MP3 в этом плане имеет строгие ограничения. Не помню уже как свободный кодек Lame от них избавился, и избавился ли, но в некоторых странах, например в США, даже просто встроить в программу кодирование в MP3 запрещено, пример - свободный аудио-редактор Audacity, чтобы иметь возможность сохранять в MP3, пользователь должен сам подключить внешний кодер.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 11.02.2009, 13:28   #3
Котовский
Пользователь
 
Аватар для Котовский
 
Регистрация: 24.12.2008
Сообщений: 19
По умолчанию

Вся проблема в том, что в нэте, столько теории по этому вопросу, и во всех статьях так уверенно написано: здесь так, здесь эдак. Сколько вариантов я перепробовал - на практике-то не работает! Максимум что у меня получилось - это читать таги, с остальным получается какая-то чушь. А самое главное, что подталкивает меня в этом вопросе, что мы-то, слава Богу, не амереканцы.
Так что если есть у каво-нибуть соображения по самопальному декадированию mp3, милости просим.
Я же сообщаю: искать заголовок фрэйма по:
1. заполненным старшим 11 бит;
2.заполненным старшим 12 бит;
3. заполненным старшим 11 бит и не заполненным младшим,
у меня, по крайней мере, не получилось.

Заголовок фрейма MPEG 1, 2 Layers I, II, III представляет собой
32-битную (4-байтную) структуру.
больше ничиво полезного не могу сообщить
Пока жирафы думают, кролики делают!
Котовский вне форума Ответить с цитированием
Старый 12.02.2009, 18:38   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

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

В литературе находил советы искать заголовок по первым 11 битам, но так как это весьма неточно, я немного поразмыслил и пришел к выводу что если известно что копаемся мы именно в Layer3 версии, то можно смело искать по 12 битам (12 бит отвечает за версию). Это уже немного точнее, и искать легче. А для полной уверенности, что это все таки заголовок, определить начало следующего заголовка, и если он там таки есть, то дело в шляпе, а дальше уже дело техники, позиция каждого последующего определяется на основании данных с предыдущего.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 12.02.2009 в 18:41.
mutabor вне форума Ответить с цитированием
Старый 13.02.2009, 13:42   #5
Котовский
Пользователь
 
Аватар для Котовский
 
Регистрация: 24.12.2008
Сообщений: 19
По умолчанию

я искал и по 11 и по 12, находит много как бы заголовков. Почему как бы? потому что информация у каждого заголовка отличается от других. и в первом найденом может выдасть, например, MPEG-2,5 layer-3 bytrate - 192 44100 Гц, а в соседнем Mpeg layer-1 bytrate - 128 22050 Гц, а в третьем вообще какую нибудь билиберду. Я знаю, что есть способы кодирования мп3 с переменным битрейтам, но чтобы все остальное...
Пока жирафы думают, кролики делают!
Котовский вне форума Ответить с цитированием
Старый 13.02.2009, 13:54   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Значит неправильно считывал инфу. Битрейт да, может быть переменным, но только он.

p/s Прикладываю код, он недоделан, но многое есть. Напоминаю, цель разработки была просто чтение данных о файле из заголовка, не воспроизведение звука.
Формула нахождения длины фрейма: 144 * битрейт / сэмплрейт +1; если Pad бит = 0, то единицу не прибавлять.
В коде эта формула реализована.
В эдит нужно вводить значение третьего байта заголовка. Его нужно в Hex редакторе брать вручную, программно еще не реализовано это. По значению этого байта и извлекается информация о фрейме. Поиск первого фрейма есть, но он недоделан. Все последующие фреймы искать не надо, их позиция будет известна, я писал об этом выше. При переменном битрейте длина каждого фрейма варьируется, при постоянном - одинакова.
Вложения
Тип файла: zip mp3 frame.zip (4.7 Кб, 137 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 13.02.2009 в 17:12.
mutabor вне форума Ответить с цитированием
Старый 13.02.2009, 17:32   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Котовский Посмотреть сообщение
я искал и по 11 и по 12, находит много как бы заголовков. Почему как бы? потому что информация у каждого заголовка отличается от других. и в первом найденом может выдасть, например, MPEG-2,5 layer-3 bytrate - 192 44100 Гц, а в соседнем Mpeg layer-1 bytrate - 128 22050 Гц, а в третьем вообще какую нибудь билиберду. Я знаю, что есть способы кодирования мп3 с переменным битрейтам, но чтобы все остальное...
Нужно брать больше первых бит для поиска, тогда Mpeg1 Layer3 будет как-бы "по умолчанию", эти биты попадут в ту часть, на основании к-рой ищем. Для mp3 первые 15 бит будут такие:
1111 1111 1111 + 1 + 01
[ sync word ] [mpeg 1] [layer 3]
16-й бит - error protection, если включить и его, то можно искать по первым двум байтам, а это уже намного точнее, да и легче в реализации. Определиться только с 16-м битом, если он равен единице, то первые два байта такие - FF FB, если нулю - FF FA.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 13.02.2009 в 17:46.
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка файлов формата PDF или DJVU Maks1978 JavaScript, Ajax 11 05.02.2009 11:54
Потестируйте программу (поиск похожих MP3 файлов) mutabor Софт 9 28.10.2008 14:01
MediaPlayer - как сделать последовательное воспроизведение mp3 файлов (именно mp3) Kashp Компоненты Delphi 13 28.09.2007 08:38
как перевести музон формата mp3 в waw или midi? geniy Свободное общение 7 02.09.2007 18:49
Чтение MP3 файлов из папки PAVEL315 Общие вопросы Delphi 1 03.03.2007 13:33