реклама на сайте
подробности

 
 
> Структура MP3 файлов, Как быстро узнать длительность?
KnightIgor
сообщение Jun 5 2011, 20:59
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Привет форумчанам.

Гоняю Helix MP3 декодер.
Если посмотреть на структуру простого MP3 файла (без всяких там расширений), то он состоит из последовательности блоков кодированных данных и не имеет общего заголовка, в отличие от, например, WAV (RIFF) файлов. Таким образом, узнать, какова длительность воспроизведения, нельзя, не прочитав весь файл или не прикинув приблизительно, поделив размер файла на размер блока. Последний метод дает, однако, ошибку, т.к. файл может иметь блоки, которые содержат всякую фигню, кроме, собственно, звука: иконки, информацию об альбоме, и пр... Может я чего проглядел? Действительно ли надо прошустрить весь файл, чтобы точно узнать его длительность звучания?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 25)
zksystem
сообщение Jun 6 2011, 09:58
Сообщение #2


embedder
***

Группа: Свой
Сообщений: 264
Регистрация: 11-05-05
Из: Казань
Пользователь №: 4 911



ID3 тэги в Вашем случае не помогут?


--------------------
Мечты стареют куда быстрее мечтателей… Стивен Кинг. "Ловец снов"
Go to the top of the page
 
+Quote Post
Alex_1811
сообщение Jun 6 2011, 12:09
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 178
Регистрация: 31-10-06
Из: Яблунець
Пользователь №: 21 821



Цитата(KnightIgor @ Jun 5 2011, 23:59) *
Гоняю Helix MP3 декодер.

Какой у вас камень? Битрейт 320 тянет?
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 6 2011, 17:42
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Alex_1811 @ Jun 6 2011, 14:09) *
Какой у вас камень? Битрейт 320 тянет?


@zksystem: множество файлов, как я установил, не имеют указанного тэга.

@Alex_1811: Я гоняю на SAM3U на 96MHz. 320kbps не создает никаких проблем: измерял осциллоскопом время декодирования блока в 1045 байт в выходные самплы (2304 16-битных слова), получал времена от 10.5мс до 12мс. Причем, бьется в такт басу (чем круче бас, тем больше время). 2304 слова (1152 стерео выборки) при 44.1kHz проигрываются за 26.1мс. SD-карточка, заведеная на SDIO, подчитывает очередную порцию за 1.2мс.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 6 2011, 19:05
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(KnightIgor @ Jun 6 2011, 21:42) *
Я гоняю на SAM3U на 96MHz. 320kbps не создает никаких проблем: измерял осциллоскопом время декодирования блока в 1045 байт в выходные самплы (2304 16-битных слова), получал времена от 10.5мс до 12мс. Причем, бьется в такт басу (чем круче бас, тем больше время). 2304 слова (1152 стерео выборки) при 44.1kHz проигрываются за 26.1мс. SD-карточка, заведеная на SDIO, подчитывает очередную порцию за 1.2мс.

То есть, получается загрузка процессора в 50%?
А декодер сколько оперативной памяти требует для работы?
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 6 2011, 21:12
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



К сожалению совсем быстро не получится.
Потому что может быть еще VBR.
Можно здесь посмотреть
http://www.codeproject.com/KB/audio-video/...nded&fr=101
или на PHP
http://pear.php.net/package/MP3_Id/download/
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 7 2011, 10:38
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(sonycman @ Jun 6 2011, 21:05) *
То есть, получается загрузка процессора в 50%?

Примерно так. То есть, 12мс на вызов к "MP3Decode(...)", который заполняет буфер на 26.1мс стереозвучания 44.1kHz. Далее буфер выплевывается через I2S в режиме DMA в кодек Wolfson 8731 (который есть точная копия кодека TLV320AIC23B от Texas Instruments, упоминаемого в известном проекте ARM MP3).

Цитата
А декодер сколько оперативной памяти требует для работы?


В "главном" файле Helix MP3 декодера "mp3dec.c" приведена следующая информация:

MP3DecInfo mp3DecInfo; // 0x7f0 = 2032
SubbandInfo sbi; // 0x2204 = 8708
IMDCTInfo mi; // 0x1b20 = 6944
HuffmanInfo hi; // 0x1210 = 4624
DequantInfo di; // 0x348 = 840
ScaleFactorInfo sfi; // 0x124 = 292
SideInfo si; // 0x148 = 328
FrameHeader fh; // 0x38 = 56
//-------------------------------------------
// 0x5d10 = 23824 bytes

Безусловно, нужна еще память на внешние буферы: 1045 байт на входной MP3 блок (320kbps), выходной буфер в 4608 байт (2х2304 PCM-16 слова), а вообще-то два таких: у меня пока в один декодируется, второй выплевывается по I2S, т.к. кольцевой буфер реализовать сложнее, не хотелось возиться. Плюс файловая система требует на себя до 4KB. Плюс стек и там всякие мои вещи по мелочам, итого в общем компиляция показывает чуть более 43KB занятого RAM.

Цитата(KRS @ Jun 6 2011, 23:12) *
К сожалению совсем быстро не получится.
Потому что может быть еще VBR.


Спасибо за ссылки.
VBR не поддерживается Helix декодером. Да и во всей своей куче MP3 музыки я пока не встречал Variable Bit Rate.

Сообщение отредактировал KnightIgor - Jun 7 2011, 10:38
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 7 2011, 13:17
Сообщение #8


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(KnightIgor @ Jun 7 2011, 14:38) *
кодек Wolfson 8731

Понятно, спасибо.
А кодек как тактируете?
Он в каком режиме работает - мастер или слэйв?
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 7 2011, 15:20
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(sonycman @ Jun 7 2011, 15:17) *
Понятно, спасибо.
А кодек как тактируете?
Он в каком режиме работает - мастер или слэйв?

В отличие от примера от ATMEL с совершенно кривой процессорной частотой в 98 с копейками MHz, получаемых из крутой, надо сказать, внутренней PLL, у меня проц бежит на стандартной 96MHz, а DAC тактируется соответственно 12MHz и работает чисто как слэйв. Дело в том, что создатели I2S DACов прекрасно понимали, что их продукты будут использоваться в системах с USB, где кратность частоте в 12MHz просто неизбежна. Поэтому наряду с прецизионным "нормальным" режимом тактирования от 12.288MHz и других кривых частот, дающих точно 48kHz и/или 44.1kHz, предусмотрен так называемый режим "USB" от упомянутых 12MHz и делителемм 250 (48kHz) и 272 (44.1kHz, а точно - 44.117kHz). Конечно, DAC нужно переключать в этот режим через I2C или SPI, т.к. по умолчанию установлен "нормальный" режим.
Go to the top of the page
 
+Quote Post
goodwin
сообщение Jun 7 2011, 16:27
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 481
Регистрация: 1-08-05
Пользователь №: 7 267



Цитата(KnightIgor @ Jun 7 2011, 14:38) *
VBR не поддерживается Helix декодером.

VBR поддерживается. И музыка встречается...
LPC17 тоже декодирует фрейм за 12-13мс. Правда при 72 МГц тактовой...



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 7 2011, 19:47
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(goodwin @ Jun 7 2011, 18:27) *
VBR поддерживается. И музыка встречается...

Рад за него. Читал, однако, иное.
Не ли файла с VBR? - До сих пор не видел, хочу попробовать.

Цитата
LPC17 тоже декодирует фрейм за 12-13мс. Правда при 72 МГц тактовой...

Примерно сходится: как я писал, наблюдал времена от 10.5мс до 12мс (12мс биение в момент удара баса). 72MHz/96MHz*13мс=9.75мс. Учитывая точность осциллографа...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 7 2011, 20:03
Сообщение #12


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



LPC17xx это монстр, производительность впечатляющая, максимальная среди кортексов м3.
Интересно, смогут ли с ними потягаться новые STM32F2?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 7 2011, 20:18
Сообщение #13


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sonycman @ Jun 7 2011, 23:03) *
LPC17xx это монстр, производительность впечатляющая

Точно, монстр! Особенно впечатляет АЦП. sm.gif
http://electronix.ru/forum/index.php?showtopic=90799
Go to the top of the page
 
+Quote Post
goodwin
сообщение Jun 7 2011, 21:19
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 481
Регистрация: 1-08-05
Пользователь №: 7 267



Цитата(KnightIgor @ Jun 7 2011, 23:47) *
Не ли файла с VBR? - До сих пор не видел, хочу попробовать.


В составе Nero есть примочка Wave Editir. там можно создать MP3 файл с любым битрейтом, включая VBR.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jun 11 2011, 16:25
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(goodwin @ Jun 7 2011, 23:19) *
В составе Nero есть примочка Wave Editir. там можно создать MP3 файл с любым битрейтом, включая VBR.

Нашел, сделал VBR: Helix проигрывает без проблем. Мне казалось, что я читал, что Helix не может VBR. Значит ошибся. Или это была libmad?

Дополнение, кому интересно: привожу графики времен декодирования (прикреплен JPG). Синяя линия - 320kbps, красная - 128kbps, желтая - VBR, созданый с опцией максимального качества. Вертикальная ось - миллисекунды.
Измерение проводилось просто: перед входом и после выхода из MP3Decode() сохранялись значения SysTick, после чего разница делилась на тактовую частоту (96000kHz).

Сообщение отредактировал KnightIgor - Jun 12 2011, 00:39
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
shemet
сообщение Jul 27 2011, 20:29
Сообщение #16





Группа: Новичок
Сообщений: 1
Регистрация: 29-08-10
Пользователь №: 59 170



Кто нибудь пробовал запускать MP3 файлы моно. Не могу выйти из ступора. LPC2378 Helix, под IAR. С ассемблерными функциями PolyphaseStereo и PolyphaseMono работает нормально. Моно файл записан старым SoundForge. Плейер и декодер LibMad понимают его нормально. В Hilex до декодирования не доходит, не понимает формата.

Сообщение отредактировал shemet - Jul 27 2011, 20:30
Go to the top of the page
 
+Quote Post
zuy
сообщение Jul 28 2011, 04:06
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Цитата(shemet @ Jul 27 2011, 23:29) *
Кто нибудь пробовал запускать MP3 файлы моно. Не могу выйти из ступора. LPC2378 Helix, под IAR. С ассемблерными функциями PolyphaseStereo и PolyphaseMono работает нормально. Моно файл записан старым SoundForge. Плейер и декодер LibMad понимают его нормально. В Hilex до декодирования не доходит, не понимает формата.

Пробовал, работает стабильно с моно. Ассемблерных ф-ций не используем.
С этим декодером вроде есть проект для PC в MSVC. попробуйте там, должно все получиться.
Скорее всего косяк в портировании.
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Nov 19 2011, 14:32
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Использую Helix с STM32F103VET6. Играю на внутренний 12-bit DAC. 320 кбит/с успевает наура. Polyphase на сях. есть мелкие вопросики:
1) Заглянул в либу - она аж june 2003. это у всех так?
2) Либа не понимает 32кГц - это нормально?
3) кодирование в mp3 (не на лету) делал кто-нибудь?


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 2 2011, 15:48
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Ivan Kuznetzov,
Я тут нашел, что мой helix плеер не все файлы ест, если есть возможность - опробуй этот:
2.mp3 (256kbit 44100)
пароль архива 222222 (иначе сервера не дают положить файл)
Есть подозрение что в декодере косяк...

Сообщение отредактировал kan35 - Dec 2 2011, 15:57
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 4 2011, 18:21
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Разобрался.
Дело было файловой системе. EFSL пока мне не ясно почему, не позволяет считывать корректно блоками более 512 байт... При чем странно, что блоки по 1044 байта прочитывались нормально, а по 1045 байт - сбоило. В итоге, музыка в которой в mp3 padding bit = 0 и фрэймы всегда четные - работало отлично (320 кбит), а там, где выравнивание битрейта имело место (padding bit = 1), и размеры фрэймов варьировались от 1044 до 1045, то начинаетсбоит раз на 5-10 считываний :-).
3 дня жизни убиты.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 20 2012, 18:08
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А вот и простой ответ на вопрос топикастера.

(Filesize * 8) / BitRate / 1000 -- длительность в секундах.

Употребив samplerate можно расчитать количество самплов. Тоже бывает полезно.



--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 20 2012, 19:36
Сообщение #22


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(DpInRock @ Jan 20 2012, 19:08) *
А вот и простой ответ на вопрос топикастера.
(Filesize * 8) / BitRate / 1000 -- длительность в секундах.

Если бы все было так просто... Вы бы почитали пару постов пониже: что делать, если кроме самплов музыки в файле картинки всякие и пр.?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 20 2012, 19:55
Сообщение #23


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Дык вы бы поимели бы нужду реальную в узнавании длительности, тогда бы вам стало понятно, что она нафик точная не нужна.
А кроме того, тэги и всякая дребедень занимают в процентах мало.
А для плеера сгодится ползунок отображать. Именно для этого - надо быстро.

А если картинок кто туда напихал - ну - чуть больший процент ошибки. Речь ведь не о продаже контента с миллисекундной тарификацией.

Но. Виндовый указатель свойств подчиняется этой формуле. Вне зависимости. По крайней мере наугад отобранная полсотня файлов нормально играется в плане отображения длительности.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 21 2012, 20:39
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(DpInRock @ Jan 20 2012, 20:55) *
А кроме того, тэги и всякая дребедень занимают в процентах мало.
А если картинок кто туда напихал - ну - чуть больший процент ошибки. Речь ведь не о продаже контента с миллисекундной тарификацией.

Короче, тяп-ляп, и готово?
Go to the top of the page
 
+Quote Post
kan35
сообщение Jan 22 2012, 17:22
Сообщение #25


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(KnightIgor @ Jan 22 2012, 00:39) *
Короче, тяп-ляп, и готово?

чтобы точно узнать надо пробежаться по всем фрэймам, и просуммировать время, по-другому просто никак - это же потоковый формат
винамп, например, делает так - считает статистику и постоянно корректирует показания
Go to the top of the page
 
+Quote Post
RA3WUM
сообщение Mar 9 2012, 21:47
Сообщение #26


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Покажите пожалуйста, где исходники хеликса под ARM Cortex-M скачать?

UPD Спасибо, уже сам нашёлsm.gif

Сообщение отредактировал RA3WUM - Mar 10 2012, 16:37


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 18:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01653 секунд с 7
ELECTRONIX ©2004-2016