|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.02.2009, 17:39 | #1 |
Пользователь
Регистрация: 24.12.2008
Сообщений: 19
|
Проблема с декодированием файлов формата mp3
пытался декодировать файлы mp3, не получается поймать заголовки фреймов. плюнул, сделал все при помащи bass.dll. у каво-нибуть когда нибуть эта получалось, или по любому лицензию надо?
Пока жирафы думают, кролики делают!
|
11.02.2009, 09:53 | #2 |
Телепат с дипломом
Старожил
Регистрация: 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)
Проверь себя! Онлайн тестирование | Мой блог |
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 |
Телепат с дипломом
Старожил
Регистрация: 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. |
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 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Значит неправильно считывал инфу. Битрейт да, может быть переменным, но только он.
p/s Прикладываю код, он недоделан, но многое есть. Напоминаю, цель разработки была просто чтение данных о файле из заголовка, не воспроизведение звука. Формула нахождения длины фрейма: 144 * битрейт / сэмплрейт +1; если Pad бит = 0, то единицу не прибавлять. В коде эта формула реализована. В эдит нужно вводить значение третьего байта заголовка. Его нужно в Hex редакторе брать вручную, программно еще не реализовано это. По значению этого байта и извлекается информация о фрейме. Поиск первого фрейма есть, но он недоделан. Все последующие фреймы искать не надо, их позиция будет известна, я писал об этом выше. При переменном битрейте длина каждого фрейма варьируется, при постоянном - одинакова.
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. |
13.02.2009, 17:32 | #7 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
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. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Загрузка файлов формата 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 |